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

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

11

08.05.2013, 14:45

s = 1/2 * a * t² + v * t
Wofür stehen die Unbekannten? t ist ja wohl sf::time, oder?

Siehe Physikbuch 4 Klasse. ;-)

12

08.05.2013, 14:48

Das ist die allgemeine Formel für eine gleichförmig beschleunigte bewegung. s ist der zurückgelegte Weg, a die Beschleunigung(in m/s^2), t die Zeit, und v die Anfangsgeschwindigkeit. Allerdings hast du vermutlich, wie schon gesagt wure keine beschleunigte, sondern eine gleichmäßige Bewegung.

Du rechnest dann einfach in jedem Schleifendurchlauf die Position folgendermaßen aus:
Position = AltePosition + Geschwindigkeit * vergangene Zeit.

Mit der Geschwindigkeit kannst du dann nach Belieben rumspielen und die Zeit muss natürlich immer wieder neu berechnet werden(mithilfe von sf::clock).

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

13

09.05.2013, 19:54

Achso. Tut mir leid, die Formel hab ich schon vergessen, kaum benutzt. Und die hab ich ja schon im Programm, nur ohne Beschleunigung reicht doch einfach die Entfernung, die er pro Zeiteinheit gehen soll multipliziert mit der jeweils vergangenen Zeit. Aber an anderen Computern läuft das Programm trotzdem viel langsamer. Wieso?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

09.05.2013, 19:56

Korrekt implementiert halte ich das für ausgeschlossen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

15

10.05.2013, 10:36

Die Formel kann man sich eigentlich ganz einfach merken. Geschwindigkeiten geben wir gerne in Km/h an. Also Kilometer pro Stunde. Das ist Weg durch Zeit. Das entspricht also der Formel v = s/t. Diese kannst du jetzt ja beliebig umstellen. In diesem Fall möchtest du die Strecke die zurückgelegt wird in Abhängigkeit von Geschwindigkeit und Zeit, also das ganze multipliziert mit der Zeit und du erhälst s = v*t. Im Notfall also einfach an die Größe Km/h denken und du hast die Formel eigentlich schon.
Ein Geschwindigkeitsunterschied kann sich bei einem Computerspiel normalerweise nur durch eine Unterschiedliche Framezahl bemerkbar machen. Jetzt kannst du das ja gern mal auf dem Blatt ausrechnen. Du hast eine Geschwindigkeit von 20Einheiten pro Sekunde, also würdest du s = 20Einheiten * t berechnen. Rechne dir das mal für 1 Frame pro Sekunde aus, 2 Frames pro Sekunde und 3 Frames pro Sekunde. Wie weit wird die Position jeweils nach 1 Sekunde verschoben sein?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

10.05.2013, 10:38

Gar nicht, Schorsch, weil die Zeit bei allen identisch schnell abläuft und die Frametime sich bei allen unterscheidet.
(numerische Fehler außen vor gelassen)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

17

10.05.2013, 12:01

Du hast glaube ich nicht verstanden worauf ich hinaus will. Er soll sich das einfach mal ausrechnen und dann selbst sehen dass mit der Formel keine unterschiedlichen Geschwindigkeiten der Objekte entstehen können.
s = (20Einheiten * 1 Sekunde) * 1 Frame
s = (20 Einheiten * 0.5 Sekunden) * 2 Frames
s = (20 Einheiten * 0.33 Sekunden) * 3 Frames

Von Rundungsfehlern jetzt mal abgesehen ist s immer gleich groß. Also wird die Einheit in allen 3 Fällen gleich weit bewegt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

10.05.2013, 12:15

Wie weit wird die Position jeweils nach 1 Sekunde verschoben sein?

Gar nicht, Schorsch, weil die Zeit bei allen identisch schnell abläuft und die Frametime sich bei allen unterscheidet.
(numerische Fehler außen vor gelassen)

Die Zeit ist bei allen konstant eine Sekunde. Die Geschwindigkeit ist auch bei allen konstant. Daher ist auch das Ergebnis konstant und bei allen identisch, solange er es richtig implementiert hat. Die FPS ist dabei total irrelevant und kommt in der Formel auch gar nicht vor.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

19

10.05.2013, 12:29

Und genau das sollte das ganze ihm doch zeigen;) Dass das für dich klar ist ist mir wohl bewusst. Ihm scheint das aber noch nicht klar zu sein. Also wollte ich ihm zeigen, wenn man drei verschiedene Maschinen hat bei welchen das Spiel einmal mit 1FPS einmal mit 2FPS und einmal mit 3FPS läuft, dann kann man sich ausrechnen wie weit die Einheit in einem Frame verschoben wird. Jetzt kann man das hochrechnen auf eine Sekunde und sieht dass es bei allen gleich ist. Was natürlich durch die Formel gegeben ist. Mir ist das auch klar. Korrekterweise hätte ich "s / 1Sekunde" schreiben müssen. Naja egal so muss er nicht selbst drauf kommen sondern kann es jetzt einfach nachlesen. Sollte ihm dann wohl aber klar sein.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige