Entwickler-Ecke
Multimedia / Grafik - max. FPS Rate bei G4D
Alexander88 - Sa 22.03.03 10:43
Titel: max. FPS Rate bei G4D
Hallo Leute, ich habe mal eine Frage: Ich programmiere seit einigen Monaten mit Delphi und seit ein paar Wochen auch mit "Genesis for Delphi". Ich habe jetzt ein einfaches Level indem man sich frei bewegen kann. Doch mein Problem ist, dass sich der Player auf jedem PC unterschiedlich schnell bewegt. Deshalb meine Frage: Gibt es ein Befehl in G4D für eine max. FPS Rate? :?
Aya - Sa 22.03.03 11:20
Hi,
auch wenn ich G4D nicht kenne... aber eine Maximale FPS ist niemals gut... :)
Das würde bedeuten das es
a) bei den leute ndie weniger als die Max. FPS haben langsamer läuft...
b) es wohl bei denen mit mehr als Max FPS stark ruckeln würde... z.B.
die GraKa schaff 1000FPS... MaxFPS sind 200.... also es werden 200 gezeichnet, und dann 800 FPS nixmehr... würde stark ruckeln.. ;)
Normalerweise löst man sowas indem man die Figur von der FPS abhängig bewegt.
Sagen wir die StandardtFPS ist 100...
Wenn jetzt jemand 200 FPS hat und dein spiel spielt, bewegst du die Figur so:
Figur.X := Figur.X + Schritt * (100 / 200);
In dem fall sind 100 deine MaxFPS und 200 die FPS des Spielers.. somit machst du hier in dem Beispiel Schritt * 0,5.. Aber da ja doppelt soviele FPS gezeichnet werden wie bei 100 FPS, geht du somit dieselbe strecke in der gleichen Zeit ;)
Bei jemandem mit z.B. 50 FPS würde es so aussehen:
Figur.X := Figur.X + Schritt * (100 / 50);
Er würde also pro Frame Schritt * 2 machen... da er ja ingesammt auch nur halb soviel zeit für die gesammt stecke zur verfügung hat... :)
So zummindest machen es alle modernen Spiele (ich auch *g*)
Hoffe ich hab es einigermaßen gut erklären können.. ;)
Au'revoir,
Aya~
Alexander88 - Sa 22.03.03 11:25
Danke für die Antwort, du hast mir sehr geholfen, Aya! :D
OregonGhost - Sa 22.03.03 12:09
Eine Alternative ist übrigens, die Framerate festzusetzen, aber Frameskipping zu verwenden, das heißt, wenn man über der Zeit ist, einfach mal einen Frame nicht rendern (oder zwei, oder drei (c; ). Bei der von Aya vorgeschlagenen (und übrigens auch von mir verwendeten) Methode musst du nämlich höllisch aufpassen, dass du zum einen diesen Faktor überall mit reinmultiplizierst, zum anderen wird die Kollisionserkennung unter Umständen schwieriger. Auf der anderen Seite ist Genesis doch eine fertige Engine, also müsste das alles doch automatisch geschehen ?!
Alexander88 - Sa 22.03.03 21:02
Naja, wenn ich im WindowMode spiele, kann man die Figur überhaupt nicht steuern und im FullscreenMode ist es ok. :? :cry:
Aya - Sa 22.03.03 21:35
Hi,
| Alexander88 hat folgendes geschrieben: |
| Naja, wenn ich im WindowMode spiele, kann man die Figur überhaupt nicht steuern und im FullscreenMode ist es ok. :? :cry: |
da kann man so einfach nich sagen woran es liegt... kann sehr sehr viele gründe haben... :?
Aber, beschreib das problem mal genauer... :)
Reagiert er einfach nichmeur auf die Tastendrücke etc..o.ä.??
Au'revoir,
Aya~
Alexander88 - So 23.03.03 12:56
Also, beim WindowMode ist der Player so schnell, dass man ihn nicht steuern kann. Beim FullscreenMode ist die Geschwindigkeit des Spielers ok. :cry:
OregonGhost - So 23.03.03 14:17
Tja, im Fenstermodus ist standardmäßig vertikale Synchronisation deaktiviert, im Vollbild standardmäßig aktiviert ;c)
Nichtsdestotrotz sollte das eine Sache der Engine sein. Vielleicht musst du nur irgendwo eine Einstellung vornehmen?
Alexander88 - So 23.03.03 15:24
Hmm, wenn ich das wüste, würde ich ja nicht fragen. :wink:
Andreas Pfau - Mo 24.03.03 18:33
Ich glaube, wir wären wieder bei der Framerate. Die ist im Fenster extrem groß, dadurch werden die Timing-Berechnungen (siehe Aya) ungenau. Keine Ahnung wie du auf die FPS kommst. Wenn du es mit GetTickCount() machst, also das Delay zwischen 2 Frames misst, empfehle ich dir PerformanceCounter (QueryPerformanceCounter() und (QueryPerformanceFrequency()). Ich mache das immer so, läuft gut, auch bei extremsten Frameraten von weit über 600.
Oder habe ich das falsch verstandne und das Prob liegt wo anders?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!