KeyHitEx [gelöst]
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
|
Betreff: KeyHitEx [gelöst]
|
Fr, Mai 07, 2010 19:22
Antworten mit Zitat
|
So, ich bin jetzt langsam echt am Rande der Verzweiflung. Ich wollte mit ein Funktion KeyHitEx schreiben, die die einen Snapshot der aktuellen KeyHits macht, damit ich danach darauf zugreifen kann, und nicht jeden einzelnen KeyHit selber speichern muss.
So sieht das ganze aus:
BlitzMax: [AUSKLAPPEN] [EINKLAPPEN] SuperStrict
Extern "Win32" Function GetAsyncKeyState:Int(vKey:Int) End Extern
Repeat Delay 10 AsyncRecordKeyHits() If AsyncKeyHitEx(65) Then Print "A" If AsyncKeyHitEx(66) Then Print "B" If AsyncKeyHitEx(67) Then Print "C" If AsyncKeyHitEx(68) Then Print "D" If AsyncKeyHitEx(69) Then Print "E" If AsyncKeyHitEx(65) Then Print "A" If AsyncKeyHitEx(66) Then Print "B" If AsyncKeyHitEx(67) Then Print "C" If AsyncKeyHitEx(68) Then Print "D" If AsyncKeyHitEx(69) Then Print "E" Forever
Function AsyncKeyDown:Int(vKey:Int) If vKey<0 Or vKey>255 Then Return 0 Return GetAsyncKeyState(vKey:Int) Shl 16 Shr 31 End Function
Function AsyncKeyHit:Int(vKey:Int) Global keystate:Byte[256] If vKey<0 Or vKey>255 Then Return 0 Local hit:Int=(keystate[vKey]=False And AsyncKeyDown(vKey)=True) For Local i:Int=0 To 255 keystate[i]=AsyncKeyDown(i) Next Return hit End Function
Global AsyncRKH:Byte[256] Function AsyncRecordKeyHits() For Local i:Int=0 To 255 AsyncRKH[i]=AsyncKeyHit(i) Next End Function Function AsyncKeyHitEx:Int(vKey:Int) If vKey<0 Or vKey>255 Then Return 0 Return AsyncRKH[vKey] End Function
Function AsyncFlushKeys() For Local i:Int=0 To 255 GetAsyncKeyState(i) Next AsyncKeyHit(0) End Function
Die Function AsyncKeyDown()/Hit() funktionieren Einwandfrei. Aber AsyncRecordKeyHits() und AsyncKeyHitEx() gehen nicht. Ich dachte eigentlich kann das nicht so schwer sein, aber irgendwie geht das nicht. Ich bin irgendwie grade nicht in der Lage den Fehler zu finden. Eigentlich waren für diese 2 Funktionen 5 min geplant, aber jetzt mache ich die schon seit ner halben Stunde. Ich könnte jetzt fluchen ohne Ende, so sauer bin ich grade auf micht. Fänds echt klasse, wenn mir jemand einen Schups geben könnte. Ich bin echt am Ende. Das muss ja irgendwie gehen.
EDIT: !!!Manno ich könnte mir in den Arsch beißen!!!
Der Fehler lag doch bei AsyncKeyHit(). Dort wurde der Status der Tasten nach jedem Aufruf aktualisiert. Das darf aber nicht sein, es darf nur der Status der grade abgerufen Taste aktialisiert werden.
Es tut mit Leid. Aber ich habe ein einer komplett falschen Stelle im Code geschaut. Sorry.
Hier jetzt einmal der Code wie er richtig funktioniert, falls das irgendwer mal in der Suche finden sollte, kann es es ja benutzen:
BlitzMax: [AUSKLAPPEN] [EINKLAPPEN] SuperStrict
Extern "Win32" Function GetAsyncKeyState:Int(vKey:Int) End Extern
Repeat Delay 10 AsyncRecordKeyHits() If AsyncKeyHitEx(65) Then Print "A" If AsyncKeyHitEx(66) Then Print "B" If AsyncKeyHitEx(67) Then Print "C" If AsyncKeyHitEx(68) Then Print "D" If AsyncKeyHitEx(69) Then Print "E" If AsyncKeyHitEx(65) Then Print "A" If AsyncKeyHitEx(66) Then Print "B" If AsyncKeyHitEx(67) Then Print "C" If AsyncKeyHitEx(68) Then Print "D" If AsyncKeyHitEx(69) Then Print "E" Forever
Function AsyncKeyDown:Int(vKey:Int) If vKey<0 Or vKey>255 Then Return 0 Return GetAsyncKeyState(vKey:Int) Shl 16 Shr 31 End Function
Function AsyncKeyHit:Int(vKey:Int) Global keystate:Byte[256] If vKey<0 Or vKey>255 Then Return 0 Local hit:Int=(keystate[vKey]=False And AsyncKeyDown(vKey)=True) keystate[vKey]=AsyncKeyDown(vKey) Return hit End Function
Global AsyncRKH:Byte[256] Function AsyncRecordKeyHits() For Local i:Int=0 To 255 AsyncRKH[i]=AsyncKeyHit(i) Next End Function Function AsyncKeyHitEx:Int(vKey:Int) If vKey<0 Or vKey>255 Then Return 0 Return AsyncRKH[vKey] End Function
Function AsyncFlushKeys() For Local i:Int=0 To 255 GetAsyncKeyState(i) AsyncKeyHit(i) Next End Function
M traurigen G
Der Eisvogel
|
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
|
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group