Я очень мало знаю о программировании игр, но хотел бы узнать больше. Я пытаюсь понять код для этой игры. Я пытаюсь понять, почему код передает «delta» в Shipcontrols.js, который меняет направление движения корабля на основе пользовательского ввода.
В основном игра рассчитывает «дельту» каждого цикла ...
Вот сокращенная версия стека, который использует дельта через один цикл ...
var delta = now - this.time;
this.time = now;
this.current.render.call(this.current, delta, this.renderer);
Шаги в здесь ...
ctx.manager.add("game", scene, camera, function(delta, renderer)
{
if(delta > 25 && this.objects.lowFPS < 1000) this.objects.lowFPS++;
var dt = delta/16.6;
this.objects.components.shipControls.update(dt);
Шаги в здесь ...
bkcore.hexgl.ShipControls.prototype.update = function(dt)
{
var pitchAng;
var yaw;
var roll;
if (undefined != hand){
Что делает такие вещи ...
if(this.key.forward)
this.speed += this.thrust * dt;
else
и это...
if(this.key.right)
{
angularAmount -= this.angularSpeed * dt;
Какой смысл в дельте здесь? Это просто пытается ввести элемент случайности? Код для этой игры очень хорош. Почему этот парень использовал дельту?
physics
game-loop
control
motion-control
bernie2436
источник
источник
Ответы:
Это «дельта времени». Это сколько времени прошло с момента предыдущего обновления. Необходимо убедиться, что анимация, физика и т. Д. Работают с правильной скоростью.
Код выполняется один раз за обновление кадра. Тем не менее, нет гарантии, что кадры отрисовываются с постоянной скоростью. Один кадр может занимать 1/60 секунды, а следующий - 1/30. Если вы не измеряете и не учитываете это, игра будет нервной и будет работать слишком быстро или слишком медленно в различных обстоятельствах.
Дельты времени часто применяются в физике, поскольку именно так определяются уравнения для простых интегрирований Эйлера. Интегрирование скорости в положение определяется как
x1 = x0 + v * (t1 - t0)
упрощение в виде кодаx += v * dt
. Следовательно, для оценки обновлений физики необходимы дельты времени.Очень и очень нормально измерять и применять дельты времени.
источник
«Дельта», «d» или «Δ» означает «разница» в математическом контексте . Всякий раз, когда есть разница между двумя числами с похожими значениями, эту разницу можно назвать «дельта» или «d».
Дельты очень распространены в разработке игр. Например, разницу между X-координатой персонажа секунду назад и его X-координатой теперь можно назвать «delta x», и обычно она обозначается как
dx
,delta_x
илиd_x
.Кроме того, очень часто разница между двумя значениями, как в вашем коде:
В этом случае эта переменная обозначает разницу между временем, сохраненным в
this.time
, и временем, сохраненным вnow
.Дельты обычно используются для представления изменений чего-либо во времени. Например, если вы знаете, что координата X игрока должна меняться на 5 пикселей каждый кадр, вы можете сохранить это изменение как дельту:
А затем используйте эту дельту, чтобы применить изменения, когда вам это нужно:
Но помните, что это всего лишь соглашение. Никто не заставляет вас называть ваши переменные «delta» или «d», но это может помочь кому-то еще, кто читает ваш код, или вам самим, если вы будете читать его в будущем, чтобы понять, что переменная должна делать.
Другие распространенные греческие буквы, широко используемые в программировании:
Эпсилон : за очень маленькое значение. Обычно используется при сравнении с плавающей запятой или других переменных с проблемами точности:
Пи : для одноименной константы
Тета : для представления углов
Лямбда : для представления анонимных функций или замыканий
источник
dt
обозначаетdelta time
. Он используется при расчете частоты кадров, чтобы гарантировать, что игра работает с одинаковой скоростью независимо от частоты кадров.Более подробную информацию о
framerate independence
можно найти здесь .источник
dt (дельта-время) - это время между каждым циклом / кадром рендеринга (или любой временной отметкой, которую вы хотите) вашего цикла. С этим дельта-временем мы можем растянуть определенные значения во времени. Как и в реальном мире, мы измеряем определенные физические свойства с течением времени.
Допустим, мы запускаем нашу игру со скоростью 60 кадров в секунду. Если мы хотим, чтобы наш проигрыватель двигался со скоростью 5 пикселей в секунду, мы делаем
или
Персонаж перемещается на 5 пикселей за 60 кадров. Чем дольше ваш цикл занимает большее время дельта получит.
Для каждой частоты кадров (1/30, 1/25 и т. Д.) Результат будет одинаковым.
источник