Vernünftiges Timer Beispiel

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Vernünftiges Timer Beispiel

Beitrag von X360 Andy »

Seitdem ich angefangen habe mit PB versuche ich mich an Timern / Countdowns.

Bis Heute hab ich es noch nicht hinbekommen einen Timer einzubauen der von 5 auf 0 runterzählt.

Ich hab denke ich einen ganz großen Denkfehler drin.
Ich hab mir Beispiele auf purearea.net,hier im Forum und auch aus anderen Codes abgeschaut.
Aber ich bekomms nicht hin.

Ich möchte einfach ein einfaches Beispiel haben wo der Debuger mir bei 5 ,4,3,2,1 Sekunde eine Meldung rausgibt.

Ich wäre verdammt dankbar wenn jemand das kurz als Beispiel machen könnte (da ich denke es sehr einfach ist :( )
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

:?

Code: Alles auswählen

For n = 5 To 0 Step -1
 Delay(1000)
 Debug n
Next
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

:(

Danke aber bringen tut mir das eigentlich nichts.


Brauche einen Spieltimer ....( ok das hätte ich vieleicht schreiben sollen ? ) und eine delay() hält das Spiel/Program ja an /:->


Trotzdem danke <)
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Hier, sicher nich das optimalste, aber ziemlich simpel gehalten:

Code: Alles auswählen

OpenConsole()

start = ElapsedMilliseconds()
count = 5
Repeat
  Delay(10) ;Programmcode...
  
  If ElapsedMilliseconds()-start >= 1000 ;1 Sekunde rum
    PrintN(Str(count))
    count-1
    start = ElapsedMilliseconds()
  EndIf
Until count = 0




Repeat
  Delay(10)
Until Inkey() ;Warten bis der "Button" gedrückt wurde

time = ElapsedMilliseconds()-start

PrintN("Du hast "+StrF(time/1000,2)+" Sekunden gebraucht...")

Delay(5000)
(\/) (°,,,°) (\/)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

naja... wenn's um X360-Mathe geht, ne Fensteroberfläche ist wieder was anderes als ein "Game Timer"...

sowas zum Bleistift:

Code: Alles auswählen

#timerduration = 1000
#countdown = 10
OpenWindow(0, 0, 0, 128,80, "Ticker")
CreateGadgetList(WindowID(0))
TextGadget   ( 0, 8,  4, 112, 28, Str( #countdown ), #PB_Text_Center|#PB_Text_Border )
ButtonGadget ( 1, 8, 44, 112, 28, "New Count")

timer = ElapsedMilliseconds() + #timerduration
count = #countdown
SetGadgetText( 0, Str( count ) )
counting = 1
MessageBeep_(#MB_ICONQUESTION)

Repeat
  Event    = WaitWindowEvent(50)
  EventGad = EventGadget()

  If Event = #PB_Event_Gadget
    If EventGad = 1
      timer = ElapsedMilliseconds() + #timerduration
      count = #countdown
      SetGadgetText( 0, Str( count ) )
      counting = 1
      MessageBeep_(#MB_ICONQUESTION)
    EndIf
  EndIf

  If Event = #PB_Event_CloseWindow
    Quit = 1
  EndIf

  If ElapsedMilliseconds() > timer And counting = 1
    timer + #timerduration
    If count > 1
      MessageBeep_(#MB_ICONINFORMATION)
      count -1
    Else
      MessageBeep_(#MB_ICONERROR)
      counting = 0
      count = 0
    EndIf
    SetGadgetText( 0, Str( count ) )
  EndIf
Until Quit = 1
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Kaeru Gaman hat geschrieben:sowas zum Bleistift:
hier nochmal als WinAPI-Variante:

Code: Alles auswählen

Procedure CountDown()
  
  If GetGadgetText(0) = "0"
    KillTimer_(WindowID(0), 0)
    MessageRequester("", "Möp")
    ProcedureReturn
  EndIf
  
  SetGadgetText(0, Str(Val(GetGadgetText(0)) - 1))
  
EndProcedure

OpenWindow(0, 0, 0, 128,80, "Ticker")
CreateGadgetList(WindowID(0))
TextGadget   ( 0, 8,  4, 112, 28, "10", #PB_Text_Center|#PB_Text_Border )
ButtonGadget ( 1, 8, 44, 112, 28, "New Count")

Repeat
  
  Event = WaitWindowEvent()
  
  Select Event 
      
    Case #PB_Event_Gadget
      If EventGadget() = 1
        SetGadgetText(0, "10")    
        KillTimer_(WindowID(0), 0)
        SetTimer_(WindowID(0), 0, 1000, @CountDown())
      EndIf
      
    Case #PB_Event_CloseWindow
      Quit = 1
      
  EndSelect
  
Until Quit = 1
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Boah was ist den mit mir los , ich versuche grad Kiffis Code in mein X360 Mathe einzubauen aber ich scheitere auf allen Punkten.
Ich glaub ich hab heute schon zu viel gerechnet :?

Ich geh erstmal was anders machen, und versuche es später erneut :(

Danke euch allen :allright:
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

X360 Andy hat geschrieben:Boah was ist den mit mir los , ich versuche grad Kiffis Code in mein X360 Mathe einzubauen aber ich scheitere auf allen Punkten...
Ich finde das ganze "per Hand" mit ElapsedMilliseconds() eh viel einfacher...

@CnC: Ich finde es auch ziemlich billig das das so is, das hat mich schon bei RA2 auf meinem Alten AMD 900Mhz gestört sobald es mehr als 4 Parteien waren haste noch ungefähr halbe FPS und halben Speed gehabt, inzwischen wird das ganze natürlich durch die Graka limitiert aber de Effekt is der gleiche, ich bezweifel das die Probleme hatten das einzubauen kann mir aber trotzdem keinen Grund dafür erklären. Es is auf jeden Fall schade da ich ein großer C&C-Fan bin und gerne im Netz spiele, aber manche Grafiksüchtigen meinen halt sie müssen es mit 8x AA spielen und dann kommts sowas raus -.- So damit hätte ich mal wieder meinen Unmut über das Spiel geäußert
Zuletzt geändert von KeyKon am 09.12.2008 03:51, insgesamt 2-mal geändert.
(\/) (°,,,°) (\/)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo eben.
Kiffis Beispiel ist gut, aber du brauchst nicht unbedingt nen Timer-Callback via API.

schau dir meins mal genauer an, das ist so ziemlich die einfachste Lösung für ne WindowEvent-Schleife mit Timer.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten