Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 13, 2025 18:42

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Objekte im Raster bewegen
BeitragVerfasst: Do Sep 16, 2010 21:25 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Serv,

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.

Hätte da wer ne idee ?

Danke,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte im Raster bewegen
BeitragVerfasst: Do Sep 16, 2010 21:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte im Raster bewegen
BeitragVerfasst: Fr Sep 17, 2010 10:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
und das Ansteigen von t machst du mittels aufaddieren deiner gewünschten Geschwindigkeit * deine FPS in jedem frame.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte im Raster bewegen
BeitragVerfasst: Fr Sep 17, 2010 10:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte im Raster bewegen
BeitragVerfasst: Fr Sep 17, 2010 13:42 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Coolcat hat geschrieben:
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 ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte im Raster bewegen
BeitragVerfasst: So Sep 19, 2010 09:13 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
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.

Danke,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte im Raster bewegen
BeitragVerfasst: So Sep 19, 2010 09:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Habe mal das als lazarus source + executable dazugehängt.

Wo?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte im Raster bewegen
BeitragVerfasst: So Sep 19, 2010 09:25 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Coolcat hat geschrieben:
Zitat:
Habe mal das als lazarus source + executable dazugehängt.

Wo?


Hier: http://xenorate.com/tl_files/dgl/animationTest.zip
Sorry hatte link vergessen :(


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]