Was ist falsch an meinem Code?

Für allgemeine Fragen zur Programmierung mit PureBasic.
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Beitrag 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:
Zuletzt geändert von sbehrens am 15.09.2004 07:58, insgesamt 2-mal geändert.
enjoy life... while you can!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

PS.: [c]GetTickCount_()[/c] = [c]ElapsedMilliseconds()[/c]
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Beitrag 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
enjoy life... while you can!
polo-mo
Beiträge: 6
Registriert: 14.09.2004 16:05

Beitrag von polo-mo »

Ok, danke für das mit dem GetTickCount_(), jetzt müsste eigentlich alles klar sein! :) Danke für eure Hilfe! :D
Bin neu und will ein kleines Spiel proggen.
Antworten