Bresenham
In alten Zeiten, als die Leute noch ihre eigenen grundlegenden Videoroutinen zum Zeichnen von Linien und Kreisen schrieben, war es nicht ungewöhnlich, dafür den Bresenham-Linienalgorithmus zu verwenden.
Bresenham löst dieses Problem: Sie möchten eine Linie auf dem Bildschirm zeichnen, die dx
Pixel in horizontaler Richtung verschiebt und gleichzeitig dy
Pixel in vertikaler Richtung überspannt . Zeilen haben ein inhärentes "fließendes" Zeichen. Selbst wenn Sie ganzzahlige Pixel haben, haben Sie rationale Neigungen.
Der Algorithmus muss jedoch schnell sein, was bedeutet, dass er nur Ganzzahlarithmetik verwenden kann. und es kommt auch ohne Multiplikation oder Division davon, nur Addition und Subtraktion.
Sie können das für Ihren Fall anpassen:
- Ihre "x-Richtung" (im Sinne des Bresenham-Algorithmus) ist Ihre Uhr.
- Ihre "y-Richtung" ist der Wert, den Sie erhöhen möchten (dh die Position Ihres Charakters - Vorsicht, dies ist nicht das "y" Ihres Sprites oder was auch immer auf dem Bildschirm, eher ein abstrakter Wert).
"x / y" ist hier nicht die Position auf dem Bildschirm, sondern der Wert einer Ihrer Dimensionen in der Zeit. Wenn Ihr Sprite in einer beliebigen Richtung über den Bildschirm läuft, werden natürlich mehrere Bresenhams separat ausgeführt, 2 für 2D, 3 für 3D.
Beispiel
Angenommen, Sie möchten Ihren Charakter in einer einfachen Bewegung von 0 bis 25 entlang einer Ihrer Achsen bewegen. Da es sich mit Geschwindigkeit 2.5 bewegt, wird es dort bei Frame 10 ankommen.
Dies ist dasselbe wie "Zeichnen einer Linie" von (0,0) bis (10,25). Schnappen Sie sich Bresenhams Linienalgorithmus und lassen Sie ihn laufen. Wenn Sie es richtig machen (und wenn Sie es studieren, wird es sehr schnell klar, wie Sie es richtig machen), dann werden 11 "Punkte" für Sie generiert (0,0), (1,2), (2, 5), (3,7), (4,10) ... (10,25).
Hinweise zur Anpassung
Wenn Sie diesen Algorithmus googeln und Code finden (Wikipedia hat einen ziemlich großen Vertrag), gibt es einige Dinge, auf die Sie achten müssen:
- Es funktioniert offensichtlich für alle Arten von
dx
und dy
. Sie interessieren sich jedoch für einen bestimmten Fall (das heißt, Sie werden ihn niemals haben dx=0
).
- Die übliche Implementierung wird verschiedene Fälle für die Quadranten auf dem Bildschirm haben, abhängig davon, ob
dx
und ob dy
positiv, negativ und auch ob abs(dx)>abs(dy)
oder nicht. Natürlich wählen Sie hier auch aus, was Sie brauchen. Sie müssen besonders darauf achten, dass die Richtung, die mit 1
jedem Tick erhöht wird, immer Ihre "Uhr" -Richtung ist.
Wenn Sie diese Vereinfachungen anwenden, wird das Ergebnis in der Tat sehr einfach sein und alle Realitäten vollständig beseitigen.