Frage bzgl. Tastenabfrage

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Kowalski

Betreff: Frage bzgl. Tastenabfrage

BeitragSo, Apr 06, 2008 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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:
Arrow Irgendwie arbeitet die For-Schleife nicht korrekt, bzw. wenn ich halt eine Taste drücke, dann passiert (anscheinend) nichts.
Arrow Das Fenster bleibt da, obwohl es doch verschwinden sollte
Question Ich vermute, es liegt an der For-Schleife (habe sie hier aus dem Forum aufgegriffen)

Es wäre nett, wenn mir jemand bei diesem Problem hilft.

Gruß und Dank im voraus
Kowalski
 

#Reaper

Newsposter

BeitragSo, Apr 06, 2008 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Apr 06, 2008 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Apr 06, 2008 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Very Happy

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group