Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

03.08.2010, 23:03

Unterschiedliche Fortbewegungsgeschwindigkeit

Hallo,


bei meinem aktuellen Pong Klon gibt es einen Fehler an dem ich schon seit Tagen rätsle. Wie der Titel schon sagt bewegt sich die Spielfigur auf anderen Rechnern unterschiedlich schnell. Ich arbeite aber wie auch bei meinen vorherigen Projekten immer der der vergangenen Zeit eines Frames.

Also

Zitat

speed = xxx * frametime;


Aber diesmal scheint da was schief zu laufen. Ich wüsste jetzt auch nicht wo ich ansetzen soll. Woran kann das liegen ? :huh:

ps: Benutze die SFML

edit: Der Ball scheint sich aber normal zu verhalten

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Errschaffer« (03.08.2010, 23:40)


2

03.08.2010, 23:11

Die Frametime mus mit der Geschwindigkeit multipliziert werden ;)

C-/C++-Quelltext

1
float speed = xxx * frametime;

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

03.08.2010, 23:29

das beispiel von könnte etwas verwirren weil die meisten die geschwindigkeit in der sekunde "speed" nennen...
wenn man sich etwas mit vektorrechnung auskennt ist das etwas klarer:
bewegungsvektor = richtungsvektor*geschwindigkeit(pixel pro sekunde)*frametime(in sekunden)
das geht natürlich auch ohne vektoren:
bewegung = geschwindigkeit*frametime
mir gehts da hauptsächlich um die bezeichnung.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

4

03.08.2010, 23:39

Die Frametime mus mit der Geschwindigkeit multipliziert werden ;)

C-/C++-Quelltext

1
float speed = xxx * frametime;


Tippfehler, im Code wird es natürlich multipliziert. :P

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

03.08.2010, 23:44

sonst gibts da nichts zu beachten eigentlich...
codepad.org ftw :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

04.08.2010, 00:09

sonst gibts da nichts zu beachten eigentlich...
codepad.org ftw :D

http://snippie.net/ :P
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

7

04.08.2010, 00:54

Codepad.org ist meiner Meinung nach wesentlich schneller.

MfG Stazer

idontknow

unregistriert

8

04.08.2010, 01:17

codepad ist meistens extreeem lahm, pastebin dagegen immer sehr schnell (:

Man sollte vllt erwähnen, dass das speed * frametime nur funktioniert, solange deine Anwendung im Vordergrund läuft (bzw. ist das Abhängig von deiner Spiel-Schleife, aber könnte auch dazu beitragen, dass dieser "Move-Bug" entsteht!!). Ließe sich evtl. eingrenzen indem man frametime auf 0..1.0 begrenzt :=)

9

04.08.2010, 02:13

Das hier könntest du mal ausprobieren, falls du's noch nicht getan hast:

C-/C++-Quelltext

1
myApp.SetFramerateLimit(30);


Funktion in der SFML Dokumentation


Gruß
SaRu_

10

04.08.2010, 03:26

Die Framerate sollte man sowieso begrenzen. Aber das löst das Problem ja nicht.
Und 30fps sind übrigens ein wenig wenig. ;)

Also ich mach das immer

C-/C++-Quelltext

1
2
3
float timestep = window.GetFrametime() / (1.f / window.GetFramerateLimit())
...
pos = velocity * timestep
Oder so.
stɪl traɪ tuː θɪŋk ˈpɒzətɪv

Werbeanzeige