Timer Erstellen, nur wie?
Übersicht

![]() |
pandaBetreff: Timer Erstellen, nur wie? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo freunde!
Ich muss sagen, das ich etwas stolz auf mich bin, weil ich hab das mit den Types verstanden, und in der Praxis siehts auch Gut aus! Ich hab einfach angefangen zu schreiben, und habe daran gedacht was in dem ausführlichem tutorial stand, und siehe da, ich kanns ![]() Deshalb hab ich gleich angefangen ein Spiel zu Programmieren, sozusagen ein kleines erstes Spiel, ich bin schon weit gekommen, ich kann schon schießen, und mich bewegen, aber! ich muss wissen wie ich einen so genannten timer mache, damit die Asteroiden nicht zu haufen angeflogen kommen! Ich hab schon mit millisecs versucht aber irrgend wie klappt das ganze nicht ich weiß nicht genau wie ich das einsetzten soll. Hoffe mir kann jemand helfen. Hier mal ein Screenshot zu meinem ersten Spiel, hat noch kein name. ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Timer erstellst du mit ql:CreateTimer
Das Beispiel aus der Onlinehilfe funktioniert auch ganz anschaulich.^^ Als Beispiel wurden hier 60FPS angegeben. CreateTimer funktioniert so: Schaft ein Programm mehr als 60FPS, so wird so lange an der Stelle wo WaitTimer eingetragen wurde, gewartet, bis die Gesamt-FPS auf 60 kommen würden. Nachteil: Schaft ein Rechner nicht die 60FPS, so wird es langsamer... Mit ql:Millisecs wird ein anderer Weg zur Normalisierung der Geschwidigkeit benuzt. Bei Millisecs wird die Zeit gemessen, wie lange ein Durchlauf einer Schleife benötigt. Der da ermittelte Wert wird dann an alle Geschwindigkeits- und Beschleunigungsvariablen multipliziert. Beispiel1: Geschwindigkeit=1.0 und letzte Schleifendauer 5ms ergibt, 1.0*5=5.0 Pixel Bewegung beim nächsten Durchlauf. Beispiel2: Geschwindigkeit=1.0 und letzte Schleifendauer 10ms ergibt, 1.0*10=10.0 Pixel Bewegung beim nächsten Durchlauf. Sollte klar sein.^^ Egal wie schnell oder langsam der Rechner ist, es wird immer gleich schnell auf dem Bildschirm pro Zeit bewegt. Ist der Rechner nur halb so schnell, wird die Bewegung verdoppelt. Nachteil: Jede Geschwindigkeits/Beschleunigungs -Variable muss multipliziert. Fazit: CreateTimer ist mal eben schnell gemacht, funktioniert aber nicht richtig, wenn ein langsamer Rechner benutzt wird. MilliSecs funktionert immer ganz gut, ist aber komplizierter und umständlicher in seiner Anwenung. Generell führt die MilliSecsanwendung zu ''Problemem'' (unnötiger Rechenbalast) bei sehr schnellen Rechnern und Usern die dummerweise VSync per Treiber ausgeschaltet haben. Mein Vorschlag: CreateTimer auf ein etwas zu großen Wert legen. Zum Beispiel auf 150 FPS und den Rest mit MilliSecs multiplizieren. Vorteile: Unnötige Rechenauslastung wird vermieden durch CreateTimer und alles was langsamer ist, wird mit MilliSecs umgerechnet.^^ |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
- Zuletzt bearbeitet von hectic am Mi, Jun 27, 2007 1:10, insgesamt einmal bearbeitet
![]() |
panda |
![]() Antworten mit Zitat ![]() |
---|---|---|
okay danke, dann kann ich das spiel später gut optimieren, aber meine frage war eigendlich, wie benutze ich millisecs() für die zufällig auftauchenden asteroiden. Also das jede 4 Sekunden zum beispiel ein neuer asteroit kommt.
(das mit dem frameraten, ist auch sehr informativ und ich werde es so machen ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 400,300,0,2
SetBuffer BackBuffer() While Not KeyHit(1) If MilliSecs()>ms+4000 ms=MilliSecs() xp=Rand(0,400) yp=Rand(0,300) End If Rect xp-3,yp-3,7,7,1 Flip Cls Wend End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nja hectic, man kanns auch so machen:
Code: [AUSKLAPPEN] Graphics 400,300,0,2 SetBuffer BackBuffer() ms=Millisecs() ;ms speichert den Zeitpunkt mit Millisecs While not Keyhit(1) If Millisecs()-ms>4000 then ;Wenn die Aktuelle Systemstartzeit minus die beim schleifenstart grösser als 4000 ist, dann... RuntimeError "4 Sekunden sind vorbei! EndIf Wend |
||
![]() |
panda |
![]() Antworten mit Zitat ![]() |
---|---|---|
hectic, wenn ich deinen Code ausführe hats 53% CPU auslastung, wenn ich mein Raumschiff Spiel Ausführe habe ich 20%. Ich habe da angst das ich dann wider so 80% Auslastung dann haben werde ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du musst den timed code deiner Delay struktur anpassen.
Das sind ja bloss vorschläge wie, die effektive Implementation muss deinem Code dann verständlicherweise erst angeglichen werden. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
panda |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() Jetzt ist das Problem auch überstanden, ich rücke immer mehr vor zu meinem Spiel, jetzt machts richtig spass weiter dran zuproggen, also Danke bis hier hin erstmal an die Hilfe. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group