wie kann man den Objekte die in einem Raster definiert sind von Punkt A nach B bewegen. Das raster ist z.b. 5x5 groß, pro kästchen 64x64 pixel und das objekt ist 32x32 pixel groß. Mit zeitangabe von z.b. in 3 sekunden 64 pixel bewegt.
Das Objekt startet in der mitte von Punkt A und will nun zu Punkt B. Den Weg dorthin habe ich, eine liste wie ich von Punkt A nach Punkt B komme. z.b. 1x1, 1x2,1x3,1x5,2x5,3x5,4x5,5x5, (Nach Rechts Oben und dann nach Unten)
Allerdings will ich das Objekt ganz langsam bewegen in pixel und nicht sprunghaft. Da müsste man eine art Interpolation machen nehm ich an. Nur habe ich keine idee wie ich sowas umsetzten soll. Wichtig ist, das das Objekt immer in der Mitte des jeweilgen Raster feldes bleibt, also das es auch wirklich immer auf dem Pfad bleibt.
gewünschten Geschwindigkeit * deine FPS in jedem frame.
Vermutlich ist es so gemeint, aber um es klarer auszudrücken: [Geschwindigkeit in Pixel pro Sekunde] * [Zeit in Sekunden die seit dem letzten Frame vergangen ist]
Wie die Zeitmessung zu realisieren ist hängt unter anderem vom Betriebssystem ab. Du solltest aber eine Methode verwenden die deutlich genauer als 1000stel Sekunden ist, da das ja auch mit 100fps und mehr noch korrekt laufen soll.
Wie du schon sagst, linear interpolieren. Du arbeitest einfach deine Positionsliste ab, zwischen jeweils zwei Positionen interpolierst du.
Angenommen du bist zwischen den Positionen P und Q. Über einen Parameter t steuerst du die Interpolation:
Code:
Position = (1-t)*P + t*Q
Für t=0 bekommst du P, für t=1 bekommst du Q. Beliebige float-Werte zwischen 0 und 1 liegen auf der Geraden zwischen P und Q.
Super danke, das hilft mir schonmal weiter.
Coolcat hat geschrieben:
Zitat:
gewünschten Geschwindigkeit * deine FPS in jedem frame.
Vermutlich ist es so gemeint, aber um es klarer auszudrücken: [Geschwindigkeit in Pixel pro Sekunde] * [Zeit in Sekunden die seit dem letzten Frame vergangen ist]
Wie die Zeitmessung zu realisieren ist hängt unter anderem vom Betriebssystem ab. Du solltest aber eine Methode verwenden die deutlich genauer als 1000stel Sekunden ist, da das ja auch mit 100fps und mehr noch korrekt laufen soll.
Für Windows / Delphi gibt es ja QueryPerformanceCounter aber was ich nehme ich den in Freepascal ? Hat freepascal eine Zeit funktion die genauer ist als GetTickCount die Platform unabhängig ist ?
Ich hab das ganze nun mal "versucht" umzusetzten, allerdings wirkt es nicht gut und scheint auch noch ein bischen zu spinnen.
Was ich eigentlich machen will, man klickt auf eine neue position.
Dann soll ein objekt (Welches auf einem startfeld steht) in seiner aktuellen Geschwindigkeit zu dieser Position fahren (Feld für feld), dabei aber sauber immer im feld bleiben.
Das funktioniert irgendwie problemlos für Nach Rechts und Unten fahren, aber nach Links und Oben Springt meine implementierung. Dazu ist es irgendwie unstabil umgesetzt.
Habe mal das als lazarus source + executable dazugehängt.
Wäre super wenn das sich jemand mal anschauen könnte und paar tips geben wie man das besser machen kann.
Hab extra kein GL verwendet darin, weil es mir erstmal nur ob die Bewegung ansich geht.
Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.