Sé muy poco acerca de la programación de juegos, pero me gustaría aprender más. Estoy tratando de entender el código de este juego. Estoy tratando de entender por qué el código está pasando un "delta" a Shipcontrols.js, que cambia la dirección del barco en función de la entrada del usuario.
Básicamente, el juego calcula "delta" cada bucle ...
Aquí hay una versión abreviada de la pila que usa delta a través de un bucle ...
var delta = now - this.time;
this.time = now;
this.current.render.call(this.current, delta, this.renderer);
Pasos hacia aquí ...
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);
Pasos hacia aquí ...
bkcore.hexgl.ShipControls.prototype.update = function(dt)
{
var pitchAng;
var yaw;
var roll;
if (undefined != hand){
Lo que hace cosas como esta ...
if(this.key.forward)
this.speed += this.thrust * dt;
else
y esto...
if(this.key.right)
{
angularAmount -= this.angularSpeed * dt;
¿Cuál es el punto del delta aquí? ¿Está tratando de introducir un elemento de aleatoriedad? El código para este juego es muy bueno. ¿Por qué este chico usa delta?
physics
game-loop
control
motion-control
bernie2436
fuente
fuente
Respuestas:
Este es el "delta del tiempo". Es cuánto tiempo ha transcurrido desde la actualización anterior. Es necesario asegurarse de que las animaciones, la física, etc. se ejecuten a la velocidad correcta.
El código se ejecuta una vez por actualización de cuadro. Sin embargo, no hay garantía de que los cuadros se dibujen a una velocidad constante. Un cuadro puede tomar 1/60 de segundo y el siguiente puede tomar 1/30. Si no mide y tiene en cuenta esto, el juego será nervioso y se ejecutará demasiado rápido o demasiado lento en varias circunstancias.
Los deltas de tiempo a menudo se aplican en física, ya que así es como se especifican las ecuaciones para integraciones simples de Euler. La velocidad de integración en posición se define como la
x1 = x0 + v * (t1 - t0)
que se simplifica en código comox += v * dt
. Por lo tanto, se requieren deltas de tiempo para evaluar las actualizaciones físicas.Es muy, muy normal que se midan y apliquen los deltas de tiempo.
fuente
"Delta", "d" o "Δ" significa "diferencia" en un contexto matemático . Siempre que haya una diferencia de diferencia entre dos números con significados similares, esa diferencia puede llamarse "delta" o "d".
Los deltas son muy comunes en el desarrollo de juegos. Por ejemplo, la diferencia entre la coordenada X de un personaje hace un segundo y su coordenada X ahora se puede llamar "delta x", y comúnmente se denota como
dx
,delta_x
od_x
.Además, es muy común tener la diferencia entre dos veces, como lo tiene en su código:
En este caso, esa variable denota la diferencia entre algún tiempo almacenado en
this.time
y el tiempo almacenado ennow
.Los deltas se usan comúnmente para representar el cambio de algo en el tiempo. Entonces, por ejemplo, si sabe que la coordenada X de un jugador debe cambiar 5 píxeles cada fotograma, puede almacenar este cambio como un delta:
Y luego use ese delta para aplicar el cambio cuando lo necesite:
Pero recuerde que esto es solo una convención. Nadie lo obliga a nombrar sus variables "delta" o "d", pero hacerlo puede ayudar a otra persona que lea su código, o usted mismo si lo lee en el futuro, a comprender qué se supone que debe hacer la variable.
Otras letras griegas comunes ampliamente utilizadas en la programación son:
Epsilon : por un valor muy pequeño. Comúnmente utilizado al comparar coma flotante u otras variables con problemas de precisión:
Pi : para la constante homónima
Theta : para representar ángulos
Lambda : para representar funciones anónimas o cierres
fuente
dt
representadelta time
. Se utiliza en el cálculo de la velocidad de fotogramas para asegurar que el juego se ejecute a la misma velocidad sin importar la velocidad de fotogramas.framerate independence
Puede encontrar más información sobre aquí .fuente
dt (tiempo delta) es el tiempo entre cada ciclo / marco de renderizado (o cualquier marca de tiempo que desee) de su bucle. Con este tiempo delta podemos estirar ciertos valores con el tiempo. Al igual que en el mundo real, medimos ciertas propiedades físicas a lo largo del tiempo.
Digamos que ejecutamos nuestro juego 60 cuadros por segundo. Si queremos que nuestro jugador se mueva 5 píxeles por segundo, lo hacemos
o
El personaje se mueve 5 píxeles sobre 60 cuadros. Cuanto más tiempo tome su ciclo, mayor será el tiempo delta.
Para cada framerate (1/30, 1/25, etc.) el resultado será el mismo.
fuente