Autor Beitrag
Alexander88
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 22.03.03 10:43 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Alexander88 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 22.03.03 11:25 
Danke für die Antwort, du hast mir sehr geholfen, Aya! :D
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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 ?!

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Alexander88 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Alexander88 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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?

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Alexander88 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 23.03.03 15:24 
Hmm, wenn ich das wüste, würde ich ja nicht fragen. :wink:
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: 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?

_________________
Life is a bad adventure, but the graphic is really good!