Je connais très peu la programmation des jeux mais j'aimerais en savoir plus. J'essaie de comprendre le code de ce jeu. J'essaie de comprendre pourquoi le code passe un "delta" à Shipcontrols.js, qui change la direction du navire en fonction de l'entrée de l'utilisateur.
Fondamentalement, le jeu calcule "delta" chaque boucle ...
Voici une version abrégée de la pile qui utilise delta thru one loop ...
var delta = now - this.time;
this.time = now;
this.current.render.call(this.current, delta, this.renderer);
Entrez ici ...
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);
Entrez ici ...
bkcore.hexgl.ShipControls.prototype.update = function(dt)
{
var pitchAng;
var yaw;
var roll;
if (undefined != hand){
Ce qui fait des trucs comme ça ...
if(this.key.forward)
this.speed += this.thrust * dt;
else
et ça...
if(this.key.right)
{
angularAmount -= this.angularSpeed * dt;
Quel est le point de delta ici? Essaie-t-il simplement d'introduire un élément de hasard? Le code de ce jeu est très bon. Pourquoi ce type a-t-il utilisé Delta?
physics
game-loop
control
motion-control
bernie2436
la source
la source
Réponses:
C'est le «delta temporel». C'est le temps qui s'est écoulé depuis la dernière mise à jour. Il est nécessaire de s'assurer que les animations, la physique, etc. fonctionnent à la bonne vitesse.
Le code s'exécute une fois par mise à jour de trame. Cependant, rien ne garantit que les images sont dessinées à une vitesse constante. Une image peut prendre 1 / 60e de seconde et la suivante peut prendre 1 / 30e. Si vous ne mesurez pas et ne tenez pas compte de cela, le jeu sera nerveux et fonctionnera trop rapidement ou trop lentement dans diverses circonstances.
Les deltas temporels sont souvent appliqués en physique car c'est ainsi que les équations sont spécifiées pour les intégrations Euler simples. L'intégration de la vitesse dans la position est définie comme
x1 = x0 + v * (t1 - t0)
ce qui simplifie en code commex += v * dt
. Par conséquent, des deltas temporels sont nécessaires pour évaluer les mises à jour de la physique.Il est très, très normal que les deltas temporels soient mesurés et appliqués.
la source
"Delta", "d" ou "Δ", signifie "différence" dans un contexte mathématique . Chaque fois qu'il existe une différence de différence entre deux nombres ayant des significations similaires, cette différence peut être appelée un "delta" ou un "d".
Les deltas sont très courants dans le développement de jeux. Par exemple, la différence entre la coordonnée X d'un caractère il y a une seconde et sa coordonnée X peut maintenant être appelée "delta x", et est généralement désignée par
dx
,delta_x
oud_x
.De plus, il est très courant d'avoir la différence entre deux fois, comme vous l'avez dans votre code:
Dans ce cas, cette variable indique la différence entre un certain temps stocké dans
this.time
et le temps stocké dansnow
.Les deltas sont couramment utilisés pour représenter le changement de quelque chose dans le temps. Ainsi, par exemple, si vous savez que les coordonnées X d'un joueur doivent changer 5 pixels à chaque image, vous pouvez stocker ce changement comme un delta:
Et puis utilisez ce delta pour appliquer le changement chaque fois que vous en avez besoin:
Mais rappelez-vous que ce n'est qu'une convention. Personne ne vous oblige à nommer vos variables "delta" ou "d", mais cela peut aider quelqu'un d'autre qui lit votre code, ou vous-même si vous le lirez à l'avenir, à comprendre ce que la variable est censée faire.
D'autres lettres grecques couramment utilisées dans la programmation sont:
Epsilon : pour une très petite valeur. Couramment utilisé lors de la comparaison de virgule flottante ou d'autres variables présentant des problèmes de précision:
Pi : pour la constante éponyme
Thêta : pour représenter les angles
Lambda : pour représenter des fonctions anonymes ou des fermetures
la source
dt
représentedelta time
. Il est utilisé dans le calcul de la fréquence d'images pour garantir que le jeu fonctionne à la même vitesse, quelle que soit la fréquence d'images.Plus d' informations sur
framerate independence
peuvent être trouvés ici .la source
dt (delta time) est le temps entre chaque cycle / image de rendu (ou tout horodatage que vous désirez) de votre boucle. Avec ce temps delta, nous pouvons étirer certaines valeurs dans le temps. Tout comme dans le monde réel, nous mesurons certaines propriétés physiques au fil du temps.
Disons que nous exécutons notre jeu 60 images par seconde. Si nous voulons que notre lecteur bouge de 5 pixels par seconde, nous le faisons
ou
Le personnage se déplace de 5 pixels sur 60 images. Plus votre cycle prend de temps, plus le delta sera long.
Pour chaque framerate (1/30, 1/25, etc.), le résultat sera le même.
la source