2010-01-05 15 views
5

Ich habe bemerkt, dass einige Programmierer Objekte basierend auf dem Zeitunterschied animieren. Ich bin mir nicht sicher warum oder auch wenn das logisch ist. Kennt jemand die Bedeutung?Warum werden Animationen manchmal mithilfe von Schritten ausgeführt, die auf der verstrichenen Zeit basieren?

Unten finden Sie ein Code-Snippet, das erklärt, was ich meine:

var timePassed:int = getTimer()-lastTime; 
lastTime += timePassed; 
var newBallX = ball.x + ballDX*timePassed; 
var newBallY = ball.y + ballDY*timePassed; 
+0

überprüfen Sie diesen Thread: http://StackOverflow.com/Questions/1284886/Optimizing-Transition-Movement-Smoothness-for-A-2D-Flash-Game – Cay

Antwort

16

Wenn Sie auf Zeit basiert Animieren Sie sich von der Framerate unabhängig machen. Egal wie viele Frames passiert sind, dein Ball wird sich in einer bestimmten Zeit um die gleiche Distanz bewegen. Vergleichen Sie das mit der Framerate, die von vielen Variablen abhängig ist, z. B. wie viel Rechenleistung für die Animation zur Verfügung steht.

Dies ist ein übliches Spielphysik-Problem - sehen Sie sich Glenn Fiedlers exzellentes "Fix Your Timestep!" article genauer an. (Wenn Sie es richtig machen, ist das etwas komplizierter als nur die Multiplikation Ihrer Richtungsvektoren mit dem Zeitschritt.)

+1

Und wenn Sie jemals die Bildfrequenz von eine laufende SWF, Sie werden völlig die Notwendigkeit von Johns Antwort verstehen :) – Aaron

1

Warum nicht so? Im Gegensatz zu was tun? Es ist eine einfache lineare Bewegung oder? Hier ist ein Gedanke: Dies ermöglicht es dem Ball, seine beabsichtigte Position einzuholen, falls andere Programme den Computer verlangsamen.

+0

Ich dachte darüber nach. – numerical25

0

Ein modernes Computerbetriebssystem führt viele Aufgaben gleichzeitig aus, und Sie erhalten nicht immer Ihre Zeitscheiben in regelmäßigen Abständen. Wenn Sie den Unterschied in der Echtzeituhr verwenden, glätten Sie die Bewegung im Vergleich zu dem Fall, dass Sie jedes Mal den gleichen Betrag durch die Schleife bewegen, was dazu führen könnte, dass es ruckelt, wenn das Betriebssystem einige Millisekunden einem anderen Prozess vorgibt zu dir.

4

Die Logik ist einfach.

BallDX => Kugel Delta X => Der Abstand der Kugel auf der x-Koordinate in einer Sekunde

timepassed => Menge an Zeit vergangen

if OldBallX = 0 
if BallDX = 10 
if TimePassed = 1 sec 
Then NewBallX = OldBallX + (BallDX*TimePassed) 

Welche

NewBallX = 0 + (10 * 1) = 10 pixels 
bedeutet bewegen kann

In diesem Fall

if TimePassed = 0.5 sec (half a second) 

Dann

NewBallX = 0 + (10 * 0.5) = 5 pixels 

Logik?

0

Der wichtigste Aspekt der Unabhängigkeit von der Framerate ist, dass Sie die Framerate nicht verketten müssen. Es war einmal, in den dunklen Zeiten, dass Spiele geschrieben wurden, um die CPU so gut wie möglich zu nutzen und die Bildrate wurde durch die CPU-Geschwindigkeit bestimmt. Ich erinnere mich daran, Spiele auf meiner 16 MHz-Maschine zu spielen, bei denen Dinge so schnell vorbeifliegen würden, dass man nicht reagieren konnte, weil sie für 1-MHz-Maschinen geschrieben wurden. Programmierer haben sich daran gewöhnt und haben angefangen, Spiele zu schreiben, die die Framerate begrenzen, in der Regel bei 30 fps in den frühen Jahren, später bei 60 fps (normalerweise an den VSYNC des Monitors gebunden). Dies löste das Problem, aber war wirklich nervig für diejenigen von uns mit tollen Computern, die mehr fließende Bewegung wollten. Irgendwann haben sie begonnen, die Spiele völlig unabhängig von der Framerate zu schreiben, was Ihnen erlaubt, ein Spiel mit 700fps zu spielen und die gleiche Erfahrung wie bei 20fps zu bekommen, außer glatteren Grafiken. Und es kann auch mit der Laständerung während des Spiels umgehen, wie andere gesagt haben, was bei den heutigen Multitasking-Betriebssystemen sehr wichtig sein kann.

0

Wenn Sie die Animation als eine Funktion der Zeit zu machen, können Sie unabhängig von der Framerate sein etwas, was bedeutet, dass, wenn Sie Ihre Animation für 24fps machen, können Sie leicht anpassen die Animation eine 30 fps passen Szenario, wenn es dynamisch (wie in durch eine Funktion definiert/Gegensatz von Rahmen Zeichnungen zu gestalten, wo Planung ist alles)

Dieser kleine Geschichte ist, für die volle Erklärung einen Blick auf gute alten Robert Penner hat 'Kapitel auf Motion, Tweening and Easing.

Verwandte Themen