Autor Beitrag
sarsel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Do 31.08.06 14:28 
Ich benötige für ein Spiel die Möglichkeit, dass in gleichen Zeitabschnitten ein Ereignis aufgerufen wird.

Wenn ich den TTimer verwende und einen Testlauf mache, merke ich irgendwo unterhalb von Interval=500 nichts mehr davon, dass sich mein Spiel schneller bewegt. Sogar Interval=1 oder 10 unterscheidet sich nicht mekrlich von Interval=100

Woran liegt das?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 31.08.06 16:03 
Was passiert denn in der OnTimer-Prozedur? Irgendwann kommt der Rechner ja auch nicht mehr mit ;-)

Und ein Timer ist generell nur recht ungenau, und Intervalle von < 20ms sollte man nach Möglichkeit vermeiden.

_________________
We are, we were and will not be.
Raffo
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 300



BeitragVerfasst: Do 31.08.06 16:39 
Für sowas gibt es extra Timer Komponenten. Der Delphi eigene Timer kommt nur bis 50ms.
sarsel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 03.09.06 12:12 
Titel: hmm..
Hallo.

danke für eure antworten.

ich merke gerade, dass mein problem aus zwei problemen besteht, und beschreibe diese mal etwas genauer:

es geht um ein spiel und der timer ist dazu da, den speilfluss zu steuern, also die diskreten aktionen hervorzurufen.

das oben beschriebene problem (problem#1) bestand darin, dass mein OnTimer-code viel länger dauerte, als das intervall selbst und dadurch wurde alles aufgeschoben, und ab einer grenze konnte das spiel nicht schneller gehen. dieses problem habe ich gelöst, indem ich den code effektiver gemacht habe.

aber jetzt kommt noch problem#2: auf verschiedenen cpus ist das spiel trotzdem verschieden schnell. ist die vermutung richtig dass sich die zeit für eine spielphase so zusammensetzt:

(Zeit des TimerIntervalls), (Zeit der OnTimerCode-Ausführung), (Zeit des TimerIntervalls), (Zeit der OnTimerCode-Ausführung), usw....

dann bräuchte ich nämlich eine ZeitStopp-Routine und könnte problem#2 lösen, indem ich vor Spielbeginn den TimerCode ausführe, die benötigte Zeit stoppe und vom TimerIntervall subtrahiere.

würde das klappen und gibt es eine solche Zeitstopp-Routine? Letztere müsste aber wirklich zuverlässig und Belastungsunabhängig sein (vielleicht über Systemzeit)?

Danke schonmal, sarsel
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 03.09.06 13:51 
Vielleicht hilft dir das Dein Problem zu lösen. Das Beste ist wirklich, wenn Du unabhängig von der Dauer der Berechnung und dem Einsetzen des Timer-Starts bist. Dir also anhand einer real ablaufenden Zeitschiene den aktuellen Zeitpunkt errechnest, der gerade dran ist und nicht den nächsten nimmst. Dann ist es auch unproblematischer verschiedene Rechengeschwindigkeiten der Computer zu berücksichtigen und evtl, auftretende Lags (durch parallel laufende Programme) zu kompensieren.
sarsel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 04.09.06 11:56 
Titel: ...
das problem des überlaufs verschiedener prozeduren kann bei meinem programm nicht auftreten, da alles über den einen timer läuft.

die methode des zeitstopps wäre bei mir wirklich besser, auch weil der die dauer zur ausführung des codes in meinem timer auf ein und dem selben computer auch nicht schwankt. deswegen wäre es eleganter den timer zu beginn zu initialisieren, indem ich "heimlich" den timer schon starte, nach dem ersten intervall die zeit für alles stoppe und dann den timer-intervall entsprechend anpasse.


was mir dazu fehlt ist nur die "zeitstopp-routine". es muss sie geben, weil ich hier im board schonmal drübergestolpert bin, kann es aber per suche nicht mehr finden.

und dann müsste ich noch wissen, wie zuverlässig diese routine ist, also ob sie unabhängig von systembelastung richtig misst.