Frage bzgl. Tastenabfrage
Übersicht

KowalskiBetreff: Frage bzgl. Tastenabfrage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Community,
ich lese hier schon länger mit, und habe dank der Suchfunktion schon das eine oder andere Problem halbwegs "selbständig" (war ja eigentlich mit eurer Hilfe) lösen können. Nun habe ich leider ein Problem, welches doch etwas spezieller ist. Ich schreibe gerade ein Tool für ein Game, in dem man die Bildeinstellungen und Tastenbelegungen speichern kann. Zu einem gibt das Spiel eine Tastenbelegung vor, aber die soll ja vom (zukünftigen) Spieler angepasst werden können. Nun habe ich mir schon einiges zusammengebastelt. Aber ich habe ein klitzekleines großes Problem, denn der Spieler soll bei der jeweiligen "Aktion" (Gehen,Springen,etc) auf anpassen klicken können und dann soll ein Fenster aufspringen auf dem steht "Bitte eine Taste drücken". Dann drückt der Spieler eine Taste und es soll der Wert (ScanCode) in einer Variable gespeichert werden. Hier die Funktion: Code: [AUSKLAPPEN] Function GetKey:Int() KeyWindow = CreateWindow("Steuerung anpassen", 600, 200, 300, 300) Local key_lab_1:TGadget = CreateLabel("Bitte jetzt eine Taste drücken", 10, 20, 150, 15, KeyWindow) Local key:Int = -1 Local i:Int For i= 0 To 255 If KeyHit(i) Then key = i Endif Next Return key SetStatusText PopWindow, key FreeGadget(KeyWindow) End Function Und so soll der Wert gespeichert werden: Code: [AUSKLAPPEN] If EventSource() = Gamebutton[0] Then MENUE_2:Int = GetKey() End If Nun zum Problem: ![]() ![]() ![]() Es wäre nett, wenn mir jemand bei diesem Problem hilft. Gruß und Dank im voraus Kowalski |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dein Fehler liegt am Return. Wenn du Return in einer Funktion aufrufst, "beendest" du die Funktion an dieser Stelle, und der nachfolgende Code wird nicht mehr ausgeführt. | ||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du brauchst erstmal ein Gadget das die Tasten "abfängt" die gedrückt werden.
Dafür ist ein Panel mit dem PANEL_ACTIVE Flag relativ gut geeignet. Diesen musst du dann beim anzeigen des Abfragefensters den Fokus geben und den jeweiligen Event auslesen, der erzeugt wird, wenn eine Taste gedrückt wird. Im grunde sieht es dann so aus: ( Der Code dürfte selbsterklärend sein ) Code: [AUSKLAPPEN] SuperStrict
'Framework maxgui.drivers Framework brl.win32maxgui ' musst du ggf. anpassen wenn du anstelle von Windows Mac oder Linux hast Import brl.standardio Import brl.eventqueue Print getKey() Function getKey:Int() Local key:Int Local width:Int=196,height:Int=32 Local x:Int=GadgetWidth(Desktop())/2-width/2 Local y:Int=GadgetHeight(Desktop())/2-height/2 Local window:TGadget=CreateWindow("Tastenabfrage",x,y,width,height,Null,WINDOW_CLIENTCOORDS) Local panel:TGadget=CreatePanel(0,0,window.ClientWidth(),window.ClientHeight(),window,PANEL_ACTIVE|PANEL_BORDER) CreateLabel("Taste drücken ...",0,0,panel.ClientWidth(),panel.ClientHeight(),panel,LABEL_CENTER) ActivateGadget(panel) ' panel den Fokus geben Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE Exit Case EVENT_KEYDOWN key=EventData() Exit EndSelect Forever FreeGadget(window) Return key EndFunction Grüße, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
Kowalski |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank euch beiden.
Ihr seid mir eine große Hilfe! Ich stand kurz vor der Verzweiflung. @FOODy: Dir nochmals ganz großen Dank, der Code ließ sich ganz einfach in mein bestehendes Programm integrieren. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group