Seite 1 von 2

Vernünftiges Timer Beispiel

Verfasst: 08.12.2008 00:51
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 :( )

Verfasst: 08.12.2008 00:58
von STARGÅTE
:?

Code: Alles auswählen

For n = 5 To 0 Step -1
 Delay(1000)
 Debug n
Next

Verfasst: 08.12.2008 01:05
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 <)

Verfasst: 08.12.2008 01:30
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)

Verfasst: 08.12.2008 01:31
von Kaeru Gaman

Verfasst: 08.12.2008 01:50
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

Verfasst: 08.12.2008 02:03
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

Verfasst: 08.12.2008 17:39
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:

Verfasst: 09.12.2008 03:43
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

Verfasst: 09.12.2008 03:49
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.