Tastenbelegung durch Benutzer veränderbar
-
- Beiträge: 28
- Registriert: 30.12.2009 19:20
Tastenbelegung durch Benutzer veränderbar
Hallo
Ich wollte, dass für ein Spiel die Tastenbelegung in einer eigenen Datei abgespeichert ist, und die dann geladen und im Spiel verwendet wird. (Mit den Preferences Befehlen)
Bloß habe ich das Problem, dass wenn ich zB um sich nach oben zu bewegen in der INI "Up" schreibe und es dann im Programm mit "#PB_Key_" + "Up" als Tastaturkonstanten verwenden will geht das ja nicht, da ich dann ja nur eben "#PB_Key_Up" als String habe, aber nicht die Zahl, wofür diese Konstante an sich steht.
Gibt es da noch eine einfachere Möglichkeit, als einfach alle Tastenmöglichkeiten durchzugehen
wie zB so (If TasteOben = "Up" (ausgelesen aus der INI) dann Key()\Oben = "#PB_Key_Up") ?
Ich wollte, dass für ein Spiel die Tastenbelegung in einer eigenen Datei abgespeichert ist, und die dann geladen und im Spiel verwendet wird. (Mit den Preferences Befehlen)
Bloß habe ich das Problem, dass wenn ich zB um sich nach oben zu bewegen in der INI "Up" schreibe und es dann im Programm mit "#PB_Key_" + "Up" als Tastaturkonstanten verwenden will geht das ja nicht, da ich dann ja nur eben "#PB_Key_Up" als String habe, aber nicht die Zahl, wofür diese Konstante an sich steht.
Gibt es da noch eine einfachere Möglichkeit, als einfach alle Tastenmöglichkeiten durchzugehen
wie zB so (If TasteOben = "Up" (ausgelesen aus der INI) dann Key()\Oben = "#PB_Key_Up") ?
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
wie sieht deine INI denn aus...
du musst sie ja in die INI erst mal reinbekommen.
wie schreibst du die denn da rein?
wie schreibst du die denn da rein?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: Tastenbelegung durch Benutzer veränderbar
so ähnlich
Code: Alles auswählen
Structure Tastenbelegung
oben.i
unten.i
links.i
rechts.i
a.i
b.i
;etc
EndStructure
Global key.Tastenbelegung
Procedure ReadKey(flag = 0)
ok = OpenPreferences("Key.ini")
If ok = 0: CreatePreferences("Key.ini"): EndIf
If flag ;schreiben
PreferenceGroup("Keys")
WritePreferenceLong("oben", key\oben)
WritePreferenceLong("unten", key\unten)
;usw.
Else ;lesen
PreferenceGroup("Keys")
key\oben = ReadPreferenceLong("oben", #PB_Key_Up)
key\unten = ReadPreferenceLong("unten", #PB_Key_Down)
;usw.
EndIf
ClosePreferences()
EndProcedure
ReadKey() ;lesen
ReadKey(1) ;schreiben
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
per Array
wie von hjbremer angedeutet, in die INI müssen nicht die Namen sondern die Scancodes der Tasten.
Allerdings würde ich nicht alle Kommando-Tasten in eine Struktur packen, sondern in ein strukturiertes Array.
erstens lassen sich Arrays mit Schleifen durchgehen, Strukturfelder nicht (nur begrenzt).
zweitens braucht man vielleicht zu den Keys noch mehr Infos.
hier mal ein Beispiel für Array- und Struktur-Aufbau und damit verbundener Abfrage.
das Einrichten und Speichern hab ich erst mal außen vor gelassen.
damit du die Namen der Tasten bei der Einrichtung der Steuerung durch den User zur Hand hast,
müsstest du die Benennung aller Tasten in einer DataSection mitgeben.
Allerdings würde ich nicht alle Kommando-Tasten in eine Struktur packen, sondern in ein strukturiertes Array.
erstens lassen sich Arrays mit Schleifen durchgehen, Strukturfelder nicht (nur begrenzt).
zweitens braucht man vielleicht zu den Keys noch mehr Infos.
hier mal ein Beispiel für Array- und Struktur-Aufbau und damit verbundener Abfrage.
das Einrichten und Speichern hab ich erst mal außen vor gelassen.
Code: Alles auswählen
Structure ComKeyINF
ScnCode.i
ComName.s
KeyName.s
EndStructure
Enumeration
#ComKey_Up
#ComKey_Down
#ComKey_Left
#ComKey_Right
#ComKey_Fire
#ComKey_Rocket
#ComKey_Shield
#ComKey_Warp
#ComKey_Count
EndEnumeration
Dim CommandKey.ComKeyINF ( #ComKey_Count -1 )
CommandKey( #ComKey_Up )\ScnCode = #PB_Key_Up
CommandKey( #ComKey_Up )\KeyName = "Cursor Up"
CommandKey( #ComKey_Up )\ComName = "Accellerate"
CommandKey( #ComKey_Down )\ScnCode = #PB_Key_Down
CommandKey( #ComKey_Down )\KeyName = "Cursor Down"
CommandKey( #ComKey_Down )\ComName = "Reverse"
CommandKey( #ComKey_Left )\ScnCode = #PB_Key_Left
CommandKey( #ComKey_Left )\KeyName = "Cursor Left"
CommandKey( #ComKey_Left )\ComName = "Turn Left"
CommandKey( #ComKey_Right )\ScnCode = #PB_Key_Right
CommandKey( #ComKey_Right )\KeyName = "Cursor Right"
CommandKey( #ComKey_Right )\ComName = "Turn Right"
CommandKey( #ComKey_Fire )\ScnCode = #PB_Key_Space
CommandKey( #ComKey_Fire )\KeyName = "Space"
CommandKey( #ComKey_Fire )\ComName = "Fire Laser"
CommandKey( #ComKey_Rocket )\ScnCode = #PB_Key_LeftAlt
CommandKey( #ComKey_Rocket )\KeyName = "Left Alt"
CommandKey( #ComKey_Rocket )\ComName = "Fire Rocket"
CommandKey( #ComKey_Shield )\ScnCode = #PB_Key_LeftControl
CommandKey( #ComKey_Shield )\KeyName = "Left Control"
CommandKey( #ComKey_Shield )\ComName = "Activate Shield"
CommandKey( #ComKey_Warp )\ScnCode = #PB_Key_RightControl
CommandKey( #ComKey_Warp )\KeyName = "Right Control"
CommandKey( #ComKey_Warp )\ComName = "Warp Speed"
; ..........
ExamineKeyboard()
If KeyboardPushed( CommandKey( #ComKey_Up )\ScnCode )
; ** UP
EndIf
If KeyboardPushed( CommandKey( #ComKey_Down )\ScnCode )
; ** Down
EndIf
If KeyboardPushed( CommandKey( #ComKey_Left )\ScnCode )
; ** Left
EndIf
If KeyboardPushed( CommandKey( #ComKey_Right )\ScnCode )
; ** Right
EndIf
müsstest du die Benennung aller Tasten in einer DataSection mitgeben.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 28
- Registriert: 30.12.2009 19:20
Re: Tastenbelegung durch Benutzer veränderbar
Ja danke für die Tipps.
Ich hab jetz aber eher gemeint, ob ich irgendwie um die Schreibarbeit vorbeikomme, alle verschiedenen Tasten abzuschreiben, also zB so in der Art dass ich in der INI stehen habe "Oben" = 500 (was ja der Wert von #PB_Key_Up wäre) und das dann direkt so verwenden kann (Indem ich halt in meinem Programm schreibe, dass dieser Wert für die Nach Oben Bewegen Taste definiert ist). Das wäre aber nicht sehr benutzerfreundlich...
Deswegen wollte ich nur herausfinden ob es da einen Weg gibt ohne ellenlang in mein Programm jede unterschiedliche Taste hereinzuschreiben (also wie gesagt dass ich nicht immer schreiben muss wenn in der INI bei der NachOben Taste "Up" steht, dass es dann der Tastenwert #PB_Key_Up ist, falls dort steht "p" dass es dann #PB_Key_P ist usw... was ich ja für jede Taste schreiben müsste)
Mein Ziel war es, dass jmd. erstmal die Werte direkt in der INI verändern kann (zB zum Testen der EXE) wo er den Code ja nicht mehr verändern kann. Später kann ich es ja auch noch einrichten, dass man die Tastenbelegung im Menü umstellen kann (Mit Inkey wird das dann wohl leichter gehen).
Ich hab jetz aber eher gemeint, ob ich irgendwie um die Schreibarbeit vorbeikomme, alle verschiedenen Tasten abzuschreiben, also zB so in der Art dass ich in der INI stehen habe "Oben" = 500 (was ja der Wert von #PB_Key_Up wäre) und das dann direkt so verwenden kann (Indem ich halt in meinem Programm schreibe, dass dieser Wert für die Nach Oben Bewegen Taste definiert ist). Das wäre aber nicht sehr benutzerfreundlich...
Deswegen wollte ich nur herausfinden ob es da einen Weg gibt ohne ellenlang in mein Programm jede unterschiedliche Taste hereinzuschreiben (also wie gesagt dass ich nicht immer schreiben muss wenn in der INI bei der NachOben Taste "Up" steht, dass es dann der Tastenwert #PB_Key_Up ist, falls dort steht "p" dass es dann #PB_Key_P ist usw... was ich ja für jede Taste schreiben müsste)
Mein Ziel war es, dass jmd. erstmal die Werte direkt in der INI verändern kann (zB zum Testen der EXE) wo er den Code ja nicht mehr verändern kann. Später kann ich es ja auch noch einrichten, dass man die Tastenbelegung im Menü umstellen kann (Mit Inkey wird das dann wohl leichter gehen).
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: Tastenbelegung durch Benutzer veränderbar
wenn du von außen über eine Ini oder was auch immer etwas verändern willst
dann mußt du vorher schreiben !!!
dann mußt du vorher schreiben !!!

Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Tastenbelegung durch Benutzer veränderbar
es gibt bisher keine fertige Include, die alle Tastennamen enthält.
ich hätts gestern beinahe gemacht, aber bin dann doch lieber in die Pinte gegangen.
ich würde mit diesem Gerüst anfangen:
pack den Debug-Output in die IDE, da hast du 32 Data-Zeilen mit insgesamt 256 Tastentexten.
jetzt bleibt dir nichts anderes übrig, als alle #PB_Key_ konstanten debuggen zu lassen (oder stehen die vielleicht sogar irgendwo in der Help?)
und die Namen manuell bei den Codes einzutragen.
ich hätts gestern beinahe gemacht, aber bin dann doch lieber in die Pinte gegangen.
ich würde mit diesem Gerüst anfangen:
Code: Alles auswählen
For t = 0 To 255 Step 8
Out$ = "Data.s"
For n = 0 To 6
Out$ + " " + Chr(34) + "#" + RSet( Str(n+t), 3, "0" ) + Chr(34) + ","
Next
Out$ + " " + Chr(34) + "#" + RSet( Str(n+t), 3, "0" ) + Chr(34)
Debug Out$
Next
jetzt bleibt dir nichts anderes übrig, als alle #PB_Key_ konstanten debuggen zu lassen (oder stehen die vielleicht sogar irgendwo in der Help?)
und die Namen manuell bei den Codes einzutragen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: Tastenbelegung durch Benutzer veränderbar
Auszug aus der Hilfe:
Code: Alles auswählen
#PB_Key_0
#PB_Key_1
#PB_Key_2
#PB_Key_3
#PB_Key_4
#PB_Key_5
#PB_Key_6
#PB_Key_7
#PB_Key_8
#PB_Key_9
#PB_Key_A
#PB_Key_Add
#PB_Key_All
#PB_Key_Apostrophe
#PB_Key_B
#PB_Key_Back
#PB_Key_BackSlash
#PB_Key_C
#PB_Key_Capital
#PB_Key_Comma
#PB_Key_D
#PB_Key_Decimal
#PB_Key_Delete
#PB_Key_Divide
#PB_Key_Down
#PB_Key_E
#PB_Key_End
#PB_Key_Equals
#PB_Key_Escape
#PB_Key_F
#PB_Key_F1
#PB_Key_F10
#PB_Key_F11
#PB_Key_F12
#PB_Key_F2
#PB_Key_F3
#PB_Key_F4
#PB_Key_F5
#PB_Key_F6
#PB_Key_F7
#PB_Key_F8
#PB_Key_F9
#PB_Key_G
#PB_Key_Grave
#PB_Key_H
#PB_Key_Home
#PB_Key_I
#PB_Key_Insert
#PB_Key_J
#PB_Key_K
#PB_Key_L
#PB_Key_Left
#PB_Key_LeftAlt
#PB_Key_LeftBracket
#PB_Key_LeftControl
#PB_Key_LeftShift
#PB_Key_M
#PB_Key_Minus
#PB_Key_Multiply
#PB_Key_N
#PB_Key_NumLock
#PB_Key_O
#PB_Key_P
#PB_Key_Pad0
#PB_Key_Pad1
#PB_Key_Pad2
#PB_Key_Pad3
#PB_Key_Pad4
#PB_Key_Pad5
#PB_Key_Pad6
#PB_Key_Pad7
#PB_Key_Pad8
#PB_Key_Pad9
#PB_Key_PadComma
#PB_Key_PadEnter
#PB_Key_PageDown
#PB_Key_PageUp
#PB_Key_Pause
#PB_Key_Period
#PB_Key_Q
#PB_Key_R
#PB_Key_Return
#PB_Key_Right
#PB_Key_RightAlt
#PB_Key_RightBracket
#PB_Key_RightControl
#PB_Key_RightShift
#PB_Key_S
#PB_Key_Scroll
#PB_Key_SemiColon
#PB_Key_Slash
#PB_Key_Space
#PB_Key_Subtract
#PB_Key_T
#PB_Key_Tab
#PB_Key_U
#PB_Key_Up
#PB_Key_V
#PB_Key_W
#PB_Key_X
#PB_Key_Y
#PB_Key_Z
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Tastenbelegung durch Benutzer veränderbar
die stehen da ohne flax nur aufgezählt, ohne Werte?
nuja, nicht ganz so nutzlos wie ein zweiter Kropf, aber....
nuja, nicht ganz so nutzlos wie ein zweiter Kropf, aber....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Tastenbelegung durch Benutzer veränderbar
PB-IDE -> Werkzeuge -> Strukturverzeichnis -> Konstanten -> "PB_Key" eingebenKaeru Gaman hat geschrieben:jetzt bleibt dir nichts anderes übrig, als alle #PB_Key_ konstanten debuggen zu lassen (oder stehen die vielleicht sogar irgendwo in der Help?)
lg kevin



http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen