Wenn ich das drin hab wird das was ich da jetzt als [Restlichen Code] gemacht hab, nur super langsam ausgeführt... wenn ich dieses "If AktuQPC >..." weglasse isses super shcnell... hab ich da nen LogikFehler drin oder geht das so auf die art und weise garnich???
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wie ich dir schon per PM geschrieben hab, erkenn ich den Sinn nicht, die Sache mit dem QPFC in nem extra Thread zu machen...eigentlich macht das nur Sinn, wenn du die Counterabfrage in deiner Renderschleife machst, oder spaltest du etwa nen extra Render-Thread ab?
Nochmal zur Erinnerung (wir haben uns doch ausgiebig per PM über Time-Based-Movement unterhalten, deshalb versteh ich dein Prob auch nicht ?!?) :
Code:
// Zuerst die Frequenz des Hi-Res-Timers ermitteln
procedure Init;
begin
QueryPerformanceFrequency(Freq);
end;
Code:
procedure Draw;
begin
QueryPerformanceCounter(StartCount);
DrawScene;
QueryPerformanceCounter(FrameEndCount);
SpeedFactor := (FrameEndCount-StartCount)*100;
MoveObjects(TimeFactor);
end;
Jetzt hast du in SpeedFactor die Zeit in ms, die das System benötigt hat um den letzten Frame zu rendern, und anhand dieses Faktors lässt sich dann ganz einfach ermitteln wie schnell du deine Objekte bewegen musst!
P.S. : Dein von dir oben gelisteter Code macht irgendwie keinen Sinn...vielleicht liegts auch daran, das du nur ein paar Schnippsel gepostet hast...
Registriert: Mo Mai 06, 2002 20:27 Beiträge: 479 Wohnort: Bremen
@SOS:
bin vielleicht etwas verpeilt, aber dein code macht irgendwie keinen sinn....
Zitat:
Code:
SpeedFactor := (FrameEndCount-StartCount)*100;
MoveObjects(TimeFactor);
Erstmal, was soll der Unterschied zwischen SpeedFactor und TimeFactor sein? Und, zweiterdings: warum die Anzahl der beim Zeichnen verstrichenen Counts mit 100 multiplizieren? Ich hätte jetzt eigentlich erwartet, dass du durch die Frequenz teilst um die verstrichene Zeit zu erhalten.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
Erstmal, was soll der Unterschied zwischen SpeedFactor und TimeFactor sein? Und, zweiterdings: warum die Anzahl der beim Zeichnen verstrichenen Counts mit 100 multiplizieren? Ich hätte jetzt eigentlich erwartet, dass du durch die Frequenz teilst um die verstrichene Zeit zu erhalten.
Tja, das kommt davon, wenn man grade morgens um fünf aus den Federn steigt, und dann auf solche Postings antwort geben muss Das muss natürlich so aussehen :
Dann erhält man die korrekte Renderzeit in ms.
Aber es ist schon leicht nervig, wenn man das jemandem groß und breit per PM erklärt hat, und die Frage dann von der selben Person wieder kurz darauf im Forum gestellt wird
Also... (@SOS: Hab deine PM nochnich gelesen, mach ich gleich)
Der grund warum ich es nicht so machen kann das ich das Objekt mal um 1 bewege, bei weniger FPS um 1.3 und bei viel FPS um nur 0.5 etc liegt daran das es bei meinem Snake auf die Art leider nicht geht...
Hängt damit zusammen wie ich die hinteren teile der Schlange bewege etc.
Und warum ich nen eigenen Thread dafür gemacht hab:
Die Bewegung muß doch UNABHÄNGIG der FPS sein... wenn ich die abfrage in der RenderProcedure machen würde, währe sie wieder FPS abhängig... zummindest solange man unter 100FPS hat.. bei allem über 100FPS würde es funktionieren.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
Und warum ich nen eigenen Thread dafür gemacht hab: Die Bewegung muß doch UNABHÄNGIG der FPS sein... wenn ich die abfrage in der RenderProcedure machen würde, währe sie wieder FPS abhängig... zummindest solange man unter 100FPS hat.. bei allem über 100FPS würde es funktionieren.
Nein.Das ist falsch!
Deshalb mach ichs ja mit dem QueryPerformanceCounter, der mir hinterher ja nen Zeitfaktor liefert.Je nach FPS-Zahl ergibt deshalb die Bewegungsgeschwindigkeit multiplitziert mit dem per QPFC errechenten Zeitfaktor immer den gleichen Wert, egal ob das Spiel mit 10, 100 oder 500fps läuft.
Bei 100fps brauch der Rechner 1ms um das Bild zu rendern :
Tastatur wird nach 1ms abgefragt -> Bei Tastendruck : Bewegung = 1ms*1 Welteinheit = 1 Welteinheit
Bei 50fps brauch der Rechner 2ms um das Bild zu rendern :
Tastatur wird nach 2ms abgefragt -> Bei Tastendruck : Bewegung = 2ms*1 Welteinheit = 2 Welteinheiten
Bei 300fps brauch der Rechner 0.333ms um das Bild zu rendern :
Tastatur wird nach 0.333ms abgefragt -> Bei Tastendruck : Bewegung = 0.333ms*1 Welteinheit = 0.333 Welteinheiten
Wie man sieht, bewegt sich das Objekt unabhängig von der Renderzeit immer um den gleichen Wert.Hoffe der Sinn und Zweck von QPFC wird jetzt etwas deutlicher!
Mir is doch klar wie du das meinst... so mach ich es ja in anderen spielen auch...
Nur (!) wenn ich bei meinem Snake die Schlange aufeinmal um 0.3 einheiten bewege, anstelle nur um 0.1, dann wird sie ausseinander gerupft.. Das liegt einfach an der Art wie ich die Schlangenteile aneinander hänge.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.