Benutzerdefinierte Eingaben mit Keyboard IDs?
Benutzerdefinierte Eingaben mit Keyboard IDs?
So, ich deppscheff hab eine Tastaturabfrage so Programmiert das sie mit ASCII Werten arbeited. Das Problem ist das die ASCII Werte mit den Keyboard IDs ja nichts zu tun haben. Also passiert nichts wenn im Spiel die Taste gedrückt wird die der Benutzer selbst gewählt hat. Eigentlich wäre es kein Problem das umzuschreiben, nur bräuchte ich einen Begriff der die ID in einen String umwandelt. Wenn man z.B. Möchte das man mit W Vorwärts fährt, oder geht, oder schwimmt, hiernachdem welches Spiel man hat, das dann nicht in dem Feld für die Taste 17 steht, sondern w. Mit den ASCII Werten sind das die Begriffe ASC(Buchstabe) und CHR(Wert). Gibt es sowas auch für Keyboard IDs oder müsste ich jede Einzelne ID zuweisen, was eine sehr langfristige Arbeit wäre?
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
eine funktion dafür ist mir nicht bekannt.
du könntest ein array aufstellen, was dir diese werte rückspeichert.
die tabelle selber müsste auch auf der MSDN einsehbar sein,
das dürfte schließlich auch die bezugstabelle für den 256byte-buffer von GetKeyboardState_() sein.
die tabelle findest du auch hier:
http://www.blitzbase.de/tabellen/scancodes.htm
...und irgendwo auf der PureArea war sie doch auch mal, oder?
du könntest ein array aufstellen, was dir diese werte rückspeichert.
die tabelle selber müsste auch auf der MSDN einsehbar sein,
das dürfte schließlich auch die bezugstabelle für den 256byte-buffer von GetKeyboardState_() sein.
die tabelle findest du auch hier:
http://www.blitzbase.de/tabellen/scancodes.htm
...und irgendwo auf der PureArea war sie doch auch mal, oder?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Hallo St@ndFurz
Hier ein Beispiel:
Mfg DerProgger
Hier ein Beispiel:
Code: Alles auswählen
Procedure MyWindowCallback(WindowID,Message,wParam,lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_KEYDOWN
Buffer.s = Space(255)
GetKeyNameText_(lParam,@Buffer,Len(Buffer))
SetGadgetText(0,Buffer)
Case #WM_KEYUP
SetGadgetText(0,"")
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(0,0,0,221,116,"Beispiel",#PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
TextGadget(0,1,1,221,116,"",#PB_Text_Border|#PB_Text_Center)
EndIf
SetWindowCallback(@MyWindowCallback())
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
danke, das kann ich auch gebrauchen, aber das Problem ist eigentlich das ich das ganze in einem Screen habe, und somit die Abfragen per KeyboardInkey machen muss. Und da dieses nunmal einen String verlangt, ist es offensichtlich nicht möglich dies in die IDs umzuwandeln ausser jeden Buchstaben zu beziehen, ich würde mir auch die Zeit dafür nehmen, aber wenn es eine Möglichkeit gäbe das einfacher zu machen, dann wäre ich doch wesentlich froher^^!
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> und somit die Abfragen per KeyboardInkey machen muss.
das ist so nicht ganz richtig.
du hast doch auch die funktion KeyboardPushed()
diese erwartet genau den scancode.
wenn du jetzt ein array aufsetzt für deine funktionen, und darein die verknüpften scancodes schreibst....
also, mal angenommen in deinem array KeyCodes() bedeutet das Feld (1) die funktion "Player nach rechts"
dann schreibst du in KeyCodes(1) den keycode für die rechts-steuerung.
für WASD dann KeyCodes(1) = #PB_Key_D,
für cursortasten dann KeyCodes(1) = #PB_Key_Right
später in deiner Programmschleife fragst du ab
If KeyboardPushed(KeyCodes(1))
damit reagierst du auf cursor-right oder auf D, je nachdem welche steuerung der spieler eingestellt hat.
das ist so nicht ganz richtig.
du hast doch auch die funktion KeyboardPushed()
diese erwartet genau den scancode.
wenn du jetzt ein array aufsetzt für deine funktionen, und darein die verknüpften scancodes schreibst....
also, mal angenommen in deinem array KeyCodes() bedeutet das Feld (1) die funktion "Player nach rechts"
dann schreibst du in KeyCodes(1) den keycode für die rechts-steuerung.
für WASD dann KeyCodes(1) = #PB_Key_D,
für cursortasten dann KeyCodes(1) = #PB_Key_Right
später in deiner Programmschleife fragst du ab
If KeyboardPushed(KeyCodes(1))
damit reagierst du auf cursor-right oder auf D, je nachdem welche steuerung der spieler eingestellt hat.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Neuer Versuch 
Mfg DerProgger

Code: Alles auswählen
Dim Keys(4)
Keys(0) = #PB_Key_Up
Keys(1) = #PB_Key_Down
Keys(2) = #PB_Key_Left
Keys(3) = #PB_Key_Right
Keys(4) = #PB_Key_Escape
If Not InitSprite() Or Not InitKeyboard()
End
EndIf
If OpenScreen(800,600,16,"test")
Repeat
ClearScreen(#Black)
ExamineKeyboard()
For i = 0 To 4
If KeyboardPushed(Keys(i))
If StartDrawing(ScreenOutput())
Select i
Case 0: DrawText(400,300,"nach oben laufen")
Case 1: DrawText(400,300,"nach unten laufen")
Case 2: DrawText(400,300,"nach links laufen")
Case 3: DrawText(400,300,"nach rechts laufen")
EndSelect
StopDrawing()
EndIf
If i = 4: Break 2: EndIf
Break
EndIf
Next
FlipBuffers()
Delay(10)
ForEver
CloseScreen()
EndIf