Timer
@MVXA
Ich wollt vielmehr damit sagen, daß wir aus der Info schlecht beurteilen können, wie genau der Timer sein soll (wobei es auf rundenbasierend hindeutet und der Timer deswegen scheinbar nicht so genau sein muß). Jedoch spricht wohl kaum etwas dagegen, eine genauere Variante zu zeigen und für diese ist nun mal eine höhere Priorität nötig.
Ich wollt vielmehr damit sagen, daß wir aus der Info schlecht beurteilen können, wie genau der Timer sein soll (wobei es auf rundenbasierend hindeutet und der Timer deswegen scheinbar nicht so genau sein muß). Jedoch spricht wohl kaum etwas dagegen, eine genauere Variante zu zeigen und für diese ist nun mal eine höhere Priorität nötig.
Zuletzt geändert von THEEX am 10.04.2005 00:45, insgesamt 1-mal geändert.
Das Spiel wird ähnlich wie Moorhuhn und man hat 2 Minuten zeit Punkte zu machen also braucht das nicht so genau zu sein. Jetzt hab ich aber noch eine frag: Ich möchte die verbleibende Zeit anzeigen, wie würde ich das bei der methode mit elapsedmilliseconds() machen?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

Code: Alles auswählen
Procedure Timer()
Static Start
If Start = 0
Start = ElapsedMilliseconds()
Else
ProcedureReturn (ElapsedMilliseconds() - Start) / 1000
EndIf
EndProcedure
If InitSprite() And OpenWindow(0, 0, 0, 120, 120, #PB_Window_ScreenCentered|#PB_Window_SystemMenu, "Timer") And OpenWindowedScreen(WindowID(0), 5, 5, 110, 110, 0, 0, 0)
Repeat
Time = 120 - Timer()
If Time < 0
Time = 0
EndIf
Event = WindowEvent()
If Event = #PB_EventCloseWindow
End
EndIf
StartDrawing(ScreenOutput())
Locate(45, 45): DrawText(Str(Time))
StopDrawing()
FlipBuffers()
ClearScreen(0, 0, 0)
ForEver
EndIf
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@CSprengel
wenn er von zwei minuten spricht, geh ich einfach mal davon aus,
daß eine abweichung um ~13 Millisekunden nicht so kritisch ist.
und Danilos Hi-Res-Timer funktioniert auch dann zuverlässiger als ElapsedMilliseconds,
wenn man die Prozesspriorität nicht hochsetzt.
weiter:
schick, ne selbststartende Proc zu entwerfen,
leider ist sie aber nur einmal verwendbar,
weil du keine möglichkeit zum zurücksetzen
der Static Start implementiert hast.
(sorry, klang jetzt arg sarkastisch. deine proc ist gut, aber ein reset wär nützlich)
Zeitverfolgung:
damit sich Fehler nicht addieren, kann man auch nen fixwert zum zwischenwert addieren.
an den Anfang. Dann in die Schleife:
(*) dadurch addiert sich die abweichung nicht auf.
Immer wenn eine Sec voll ist, wird auf die nächste gewartet,
die Aktualisierung kann abweichen, aber nicht die Gesamtzeit.
Anzeige:
wenn er von zwei minuten spricht, geh ich einfach mal davon aus,
daß eine abweichung um ~13 Millisekunden nicht so kritisch ist.
und Danilos Hi-Res-Timer funktioniert auch dann zuverlässiger als ElapsedMilliseconds,
wenn man die Prozesspriorität nicht hochsetzt.
weiter:
schick, ne selbststartende Proc zu entwerfen,
leider ist sie aber nur einmal verwendbar,
weil du keine möglichkeit zum zurücksetzen
der Static Start implementiert hast.
(sorry, klang jetzt arg sarkastisch. deine proc ist gut, aber ein reset wär nützlich)
Zeitverfolgung:
damit sich Fehler nicht addieren, kann man auch nen fixwert zum zwischenwert addieren.
Code: Alles auswählen
ActTime = ElapsedMilliseconds + 1000
Code: Alles auswählen
If ElapsedMilliseconds > ActTime
ActTime + 1000 ; (*)
Sec +1
If Sec > 59
Sec = 0
Min +1
EndIf
EndIf
Immer wenn eine Sec voll ist, wird auf die nächste gewartet,
die Aktualisierung kann abweichen, aber nicht die Gesamtzeit.
Anzeige:
Code: Alles auswählen
StartDrawing(ScreenOutput())
Locate(TimX,TimY)
DrawText(Right("00"+Str(Min),2)+":"+Right("00"+Str(Sec),2))
StopDrawing()
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Es kann garantiert auch Gründe geben (wenn jetzt wohl auch nicht gerade hier), wo es sehr genau 2 min sein sollten, wobei ich schon vorher geschrieben hab, daß es ja wohl kaum etwas schadet, eine etwas genauere Möglichkeit zu zeigen...wenn er von zwei minuten spricht, geh ich einfach mal davon aus,
daß eine abweichung um ~13 Millisekunden nicht so kritisch ist.
Ist auch mir bewußt, daß es nur einmal verwendtbar ist, wie es mehrmals verwendtbar ist, hab ich vorher schon gezeigt. Desweiteren wollt ich den Code recht einfach halten und wenn man beim Ablauf der Zeit den Ausgangspunkt wieder zurück setzt, würde der Code leicht komplizierter aussehn.schick, ne selbststartende Proc zu entwerfen,
leider ist sie aber nur einmal verwendbar,
weil du keine möglichkeit zum zurücksetzen
der Static Start implementiert hast.
(sorry, klang jetzt arg sarkastisch. deine proc ist gut, aber ein reset wär nützlich)
Und wo sollte eine Abweichung entstehn???
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
bei deiner proc entsteht keine abweichung, da du ja nicht fortlaufend differenzen bearbeitest,CSprengel hat geschrieben:Und wo sollte eine Abweichung entstehn???
sondern den wert intern Static verwaltest. ist schon in ordnung.
aber da man bei millisekundenverwaltung eben oft so etwas sieht:
Code: Alles auswählen
If ElapsedMilliseconds() > Timer + Diff
Timer = ElapsedMilliseconds()
EndIf
als duch angleichung an die aktuelle Millisekunde.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.