Seite 2 von 2

Verfasst: 14.09.2004 23:29
von sbehrens
polo-mo hat geschrieben:Ich will, dass sich eine Variable autmomatisch nur jede x Millisekunden, oder auch wenn der Spieler auf einen bestimmten Knopf drückt, ändert. Die Millisekunden hätte ich gerne von einer Variablen abhängig, aber ich habe im Moment keinen blassen Schimmer wie ich das Ganze anstellen soll(auch das mit dem Drücken)...
Achso, na dann hoffe ich mal, das ich dir jetzt die richtige Antwort gebe:
Also, mit der API-Funktion

Code: Alles auswählen

GetTickCount_()
kannst du dir die Anzahl der vergangenen Millisekunden seit dem Systemstart ausgeben lassen. Hol' dir am Besten den Windows API Guide von http://www.purebasic.de/update.shtml, falls du ihn noch nicht hast. Wenn du zB. möchtest, dass etwas alle 100ms ausgeführt wird:

Code: Alles auswählen

Time.l=GetTickCount_()
Repeat
  If Time+100<=GetTickCount_() ;also: mind. 100ms sind vergangen
    Time=GetTickCount_() ;Time wieder "aktualisieren", damit in 100ms der Code wieder ausgeführt werden kann
    ... ; und hier kommt dein Code hin
  Endif
  Delay(1)
Until [Deine "Kondition"]
Und das mit der Keyboardabfrage:

Code: Alles auswählen

If InitKeyboard() ;Code nur ausführen, wenn das Keyboard initialisiert werden konnte
  Repeat
    ExamineKeyboard()
    Delay(1)
  Until KeyboardReleased(#PB_Key_xxx) ; xxx ist der Key-Identifier (siehe PB Hilfe, da sind alle Tasten aufgelistet)
Else
  MessageRequester("Fehler!","Konnte Keyboard nicht initialisieren.")
Endif
Ich hoffe ich habe das jetzt halbwegs verständlich erklärt, falls nicht musst du wohl noch auf die nächste Antwort warten, dann bin ich wohl zu schlecht im Erklären... :(

:mrgreen:

mfG
Basti

//Edit: Jetzt beides kombiniert (so wie ich dich verstehe :) ):

Code: Alles auswählen

InitKeyboard() ; jetzt ohne check ob die Initialisierung gefunzt hat.
Time.l=GetTickCount_()
Repeat
  ExamineKeyboard()
  If Time+100<=GetTickCount_() OR KeyboardPushed(#PB_Key_xxx) ;Wenn eine der Beiden "Konditionen" #true ergeben
    Time=GetTickCount_() 
     ... ; und hier kommt dein Code hin
  Endif
  Delay(1)
Until [Deine "Kondition"]
//edit: Ups, ich habe den Delay vergessen :oops:

Verfasst: 15.09.2004 06:47
von NicTheQuick
PS.: [c]GetTickCount_()[/c] = [c]ElapsedMilliseconds()[/c]

Verfasst: 15.09.2004 08:01
von sbehrens
NicTheQuick hat geschrieben:PS.: [c]GetTickCount_()[/c] = [c]ElapsedMilliseconds()[/c]
Oh, das wusste ich noch gar nicht, dass es diese Funktion auch unter PB schon gibt :oops:

mfG
Basti

Verfasst: 15.09.2004 15:42
von polo-mo
Ok, danke für das mit dem GetTickCount_(), jetzt müsste eigentlich alles klar sein! :) Danke für eure Hilfe! :D