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

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

1

07.05.2013, 19:31

Wie bekomme ich den Zeitaspekt an jedem PC konstant? (C++; SFML)

Ich wollte ein von mir erstelltes Testürpgramm meinem Kumpel zeigen. Allerdings liefen bei ihm die Bewegungen der Sprites viel langsamer und auch ruckelnder als bei mir. wie bekomme ich das so hin, dass es an jedem Rechner gleich ist?

In freudiger Erwartung auf Antworten,

SwatzZ :D

/Edit:

Um es zu konkretisieren, mit sf::Clock und sf::time unterscheidet sich das scheinbar...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SwatzZ« (07.05.2013, 19:47)


2

07.05.2013, 19:48

Schau dir mal diesen Wiki-Artikel an. Der sollte deine Fragen beantworten.

Volker_Neff

Treue Seele

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

3

07.05.2013, 19:49

Entweder du setzt eine Zeitfest wielange ein Frame läuft, dann hast du auf allen Computern die gleiche geschwindigkeit vorausgesetzt der PC ist nicht noch langsamer als deine festgesetzte Framerate. Oder die mist die Zeit vom letzten Frame und benutzt diese zum bewegen der Objekte. So das sie auf einem Langsamen Computer in einem Frame sich weiter bewegen als auf einem Schnellem. Framerate in SFML hier ist eine Möglichkeit genauer beschrieben.

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

4

07.05.2013, 19:57

Entweder du setzt eine Zeitfest wielange ein Frame läuft, dann hast du auf allen Computern die gleiche geschwindigkeit vorausgesetzt der PC ist nicht noch langsamer als deine festgesetzte Framerate. Oder die mist die Zeit vom letzten Frame und benutzt diese zum bewegen der Objekte. So das sie auf einem Langsamen Computer in einem Frame sich weiter bewegen als auf einem Schnellem. Framerate in SFML hier ist eine Möglichkeit genauer beschrieben.

Lustig, das ist mien Thread :D

Mein Problem ist nur, dass, obwohl ich elapsedtime() benutzt hab, hier, an einem besseren PC, alles langsamer geht

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

07.05.2013, 20:01

Allgemein gar nicht. Es gibt aber ein paar Methoden wo man hohe Reproduktion auf alle Rechnern mit ausreichender Geschwindigkeit erzeugen kann:

a)
Du hast ein draw() und ein update(). Das Update soll mit einer bestimmten Frequenz aufgerufen werden, z.b. 200 mal pro Sekunde. Du misst also immer, wieviel Zeit seit Programmstart vergangen ist und rufst dementsprechend oft update auf. Hast du das geschafft, rufst du einmal draw auf und beginnst von vor. Ist dein PC aber zu langsam, dann wird die Anzahl noetiger updates irgendwann zu gross, daher musst du die Aufrufe limitieren (z.b. nicht oefter als 50mal hintereinander, dann wieder draw().

b)
Du hast ein draw(t) und ein update. Das Update soll mit einer bestimmten Frequenz aufgerufen werden, z.b. 10 mal pro Sekunde. Du misst also immer, wieviel Zeit seit Programmstart vergangen ist und rufst dementsprechend oft update auf. Dann rufst du draw(t) auf und uebergibt dort die Zeit t, die seit dem letzten update() vergangen ist. Dann wieder von vorn. Der Unterschied ist jetzt, das draw den Zustand vom update nimmt und t Sekunden in die Zukunft interpoliert.

c) Du hast ein draw() und ein update(t). Diese rufst du immer abwechselnd auf. Update sorgt dafuer, das der aktuelle Zustand um genau t Sekungen weiter bewegt wird. Hierbei muss deine Mathekmatik/ Physik (genau genommen der "Integrator") aber sehr genau sein, damit die Ergebnis immer gleich oder zumindest aehnlich sind.

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

6

07.05.2013, 20:03

Danke, ich probier es mal, sobald ich am Lappi bin :)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

07.05.2013, 21:42

s = 1/2 * a * t² + v * t
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]

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

8

07.05.2013, 22:12

s = 1/2 * a * t² + v * t
Gilt auch nur, wenn die Beschleunigung konstant ist.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

07.05.2013, 22:15

In der Tat, ja. Gleichförmig beschleunigte Bewegung. Ich vermute aber mal, dass bei ihm die Beschleunigung ohnehin immer 0 ist.
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]

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

10

08.05.2013, 14:40

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

Werbeanzeige