Ich weiß sehr wenig über Spieleprogrammierung, würde aber gerne mehr erfahren. Ich versuche den Code für dieses Spiel zu verstehen . Ich versuche zu verstehen, warum der Code ein "Delta" an Shipcontrols.js übergibt, das die Richtung des Schiffes basierend auf Benutzereingaben ändert.
Grundsätzlich berechnet das Spiel "Delta" jede Schleife ...
Hier ist eine abgekürzte Version des Stapels, die Delta durch eine Schleife verwendet ...
var delta = now - this.time;
this.time = now;
this.current.render.call(this.current, delta, this.renderer);
Schritte in hier ...
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);
Schritte in hier ...
bkcore.hexgl.ShipControls.prototype.update = function(dt)
{
var pitchAng;
var yaw;
var roll;
if (undefined != hand){
Was macht sowas ...
if(this.key.forward)
this.speed += this.thrust * dt;
else
und das...
if(this.key.right)
{
angularAmount -= this.angularSpeed * dt;
Was ist der Punkt des Deltas hier? Versucht es nur, ein Element der Zufälligkeit einzuführen? Der Code für dieses Spiel ist sehr gut. Warum hat dieser Typ Delta benutzt?
physics
game-loop
control
motion-control
bernie2436
quelle
quelle
Antworten:
Dies ist das "Zeitdelta". Es ist, wie viel Zeit seit dem letzten Update vergangen ist. Es muss sichergestellt werden, dass Animationen, Physik usw. mit der richtigen Geschwindigkeit ausgeführt werden.
Der Code wird einmal pro Frame-Update ausgeführt. Es gibt jedoch keine Garantie dafür, dass Frames mit einer konstanten Geschwindigkeit gezeichnet werden. Ein Bild kann 1/60 einer Sekunde und das nächste 1/30 einer Sekunde dauern. Wenn Sie dies nicht messen und berücksichtigen, wird das Spiel nervös und läuft unter verschiedenen Umständen entweder zu schnell oder zu langsam.
Zeitdeltas werden in der Physik häufig angewendet, da die Gleichungen für einfache Euler-Integrationen so angegeben werden. Das Integrieren der Geschwindigkeit in die Position ist definiert als,
x1 = x0 + v * (t1 - t0)
was sich wie in Code vereinfachtx += v * dt
. Daher sind Zeitdeltas erforderlich, um physikalische Aktualisierungen zu bewerten.Es ist sehr, sehr normal, dass Zeitdeltas gemessen und angewendet werden.
quelle
"Delta", "d" oder "Δ" bedeutet "Differenz" in einem mathematischen Kontext . Wenn zwischen zwei Zahlen mit ähnlicher Bedeutung ein Unterschied besteht, kann dieser Unterschied als "Delta" oder "d" bezeichnet werden.
Deltas sind in der Spieleentwicklung sehr verbreitet. Zum Beispiel kann man der Unterschied zwischen dem Charakter eines X-Koordinate zweiten vor und seine X-Koordinaten kann nun „delta x“, und wird allgemein bezeichnet als bezeichnet werden
dx
,delta_x
oderd_x
.Es ist auch sehr häufig, dass der Unterschied zwischen zwei Zeiten besteht, wie in Ihrem Code:
In diesem Fall gibt diese Variable die Differenz zwischen der in gespeicherten Zeit
this.time
und der in gespeicherten Zeit annow
.Deltas werden üblicherweise verwendet, um die zeitliche Veränderung von etwas darzustellen. Wenn Sie beispielsweise wissen, dass sich die X-Koordinate eines Spielers in jedem Frame um 5 Pixel ändern sollte, können Sie diese Änderung als Delta speichern:
Verwenden Sie dieses Delta, um die Änderung bei Bedarf anzuwenden:
Aber denken Sie daran, dass dies nur eine Konvention ist. Niemand zwingt Sie dazu, Ihre Variablen "delta" oder "d" zu nennen, aber dies kann jemand anderem helfen, der Ihren Code liest, oder sich selbst, wenn Sie ihn in Zukunft lesen, um zu verstehen, was die Variable tun soll.
Andere gebräuchliche griechische Buchstaben, die in der Programmierung häufig verwendet werden, sind:
Epsilon : für einen sehr kleinen Wert. Wird häufig beim Vergleichen von Gleitkommazahlen oder anderen Variablen mit Genauigkeitsproblemen verwendet:
Pi : für die namensgebende Konstante
Theta : zur Darstellung von Winkeln
Lambda : zur Darstellung anonymer Funktionen oder Schließungen
quelle
dt
steht fürdelta time
. Es wird bei der Berechnung der Bildrate verwendet, um sicherzustellen, dass das Spiel unabhängig von der Bildrate mit derselben Geschwindigkeit läuft.Weitere Informationen zu
framerate independence
finden Sie hier .quelle
dt (Delta-Zeit) ist die Zeit zwischen jedem Zyklus / Render-Frame (oder einem beliebigen Zeitstempel) Ihrer Schleife. Mit dieser Deltazeit können wir bestimmte Werte über die Zeit strecken. Genau wie in der realen Welt messen wir bestimmte physikalische Eigenschaften über die Zeit.
Nehmen wir an, wir starten unser Spiel mit 60 Bildern pro Sekunde. Wenn wir möchten, dass sich unser Player 5 Pixel pro Sekunde bewegt, tun wir das
oder
Das Zeichen bewegt sich 5 Pixel über 60 Frames. Je länger Ihr Zyklus dauert, desto größer wird die Deltazeit.
Für jede Bildrate (1/30, 1/25 usw.) ist das Ergebnis dasselbe.
quelle