Maxgui - Tastatureingaben abfangen und sonstiges
Übersicht

![]() |
M0rgensternBetreff: Maxgui - Tastatureingaben abfangen und sonstiges |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute,
Ich habe mal wieder ein Problem mit Maxgui. Undzwar möchte ich einen Mapeditor schreiben. Das Problem dabei ist: ich benutze einige Klassen aus meinen Modulen. Darunter eine Kameraklasse, die dann auch für das Scrollen verantwortlich ist. Diese Kamera wird mit den Pfeiltasten bewegt. Wenn ich aber einfach folgende Struktur benutze: BlitzMax: [AUSKLAPPEN] Repeat Dann passiert gar nichts. Selbst, wenn ich das Fenster jedesmal neu zeichne: nichts passiert. Einfach, weil die Tastatur nicht abgefragt wird. Es funktioniert auch nicht, wenn ich EVENT_KEYDOWN benutze und die Update Methode da rein verlagere. Kann mir bitte jemand sagen, wie ich es hinbekomme, dass ich die Kamera immer bewegen kann und trotzdem MaxGui nutzen kann? Ich habe schon im Forum gesucht, aber die beiden gefundenen Beiträge haben mir nicht wirklich geholfen. Lg, M0rgenstern |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst ein Gadget haben was auf die Texteingaben reagiert - das wäre zB ein Canvas oder ein Panel.
Dieses Gadget muss dann noch aktiviert sein. Minimalbeispiel: BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich vermute, dass dein Modul die Befehle von brl.polledinput verwendet. Also zum Beispiel KeyDown, KeyHit, MouseDown etc. Unter Verwendung der maxgui wird standardmäßig polledinput nicht aktiviert, da dort die manuelle Abarbeitung der Events sinnvoller scheint. Du könntest also manuell über die Events die Zustände der Tasten in Variablen zwischenspeichern, und dein Modul so umschreiben, dass man diese als Parameter beim Updaten übergeben kann.
Eine alternative Lösung, die wesentlich einfacher scheint, ist das manuelle Aktivieren von polledinput. Dies geht über den Befehl EnablePolledInput(source:Object), welcher sich ebenfalls in brl.polledinput befindet. Wenn du als Quelle/Source dein Canvas angibst, werden nur Events die dieses betreffen berücksichtigt. Ich denke das wäre für dich so am geeignetsten. Gibt man Null an, so werden alle Events ausgewertet, dies wiederum kann bei mehreren sensitiven Gadgets zu Problemen führen. |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey BladeRunner,
Vielen Dank. Hat schon sehr geholfen. Leider ist das sehr ruckelig. Also die Kamera arbeitet mit Keydown. Wenn ich aber jetzt eine Taste gedrückt halte, dann wird das Event nicht noch einmal aufgerufen, sondern scheinbar nur einmal, denn pro Tastendruck bewegt sich die Kamera jetzt um eine Längeneinheit. Das heißt, ich muss um die Kamera, sagen wir 3 Tiles weiter zu bewegen, 3 mal die entsprechende Taste drücken. Dabei ist das Event doch EVENT_KEYDOWN. Normalerweise sollte er das dann doch aufrufen, solange eine Taste gedrückt wird, oder verstehe ich das falsch? Lg, M0rgenstern Edit: @Lobby. Danke für den Tipp. Sitze grade in einer Vorlesung. Probiere deinen Tipp deswegen später aus. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast auch EVENT_KEYUP. Der Trick ist also solange die Bewegung durchzuführen bis das losslassen der Taste registriert wird ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier nocheinmal eine Übersicht über ein paar der Key-Events:
EVENT_KEYDOWN - Wird immer dann ausgelöst, wenn eine Taste neu gedrückt wird EVENT_KEYUP - Wird ausgelöst, wenn eine Taste wieder losgelassen wird EVENT_KEYREPEAT - Wird wiederholend ausgelöst, solange die Taste gedrückt ist Wie ich schon geschrieben habe, würde ich die Zustände der Tasten in Variablen zwischenspeichern, welche allerdings nur nach den oberen beiden Events aktualisiert werden (EVENT_KEYREPEAT scheint nichteinmal dokumentiert zu sein). So macht es polledinput übrigens auch, sodass ich denke, dass du dir deren polledinput.bmx zur Inspiration auch einmal ansehen könntest. EnablePolledInput zu verwenden ist eher der bequeme Weg, aber wie es auch hier angedeuted wird: Dokumentation von brl.polledinput hat Folgendes geschrieben: The functions in this module are only available when your program is running in Graphics mode. When working on GUI applications, you should use events instead.
Würde ich trotz des Aufwandes eher den Weg mit den Events präferieren, einfach da GUI-Anwendungen nun einmal so aufgebaut werden. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] SuperStrict Hier nochmal ein Minimalbeispiel mit event_keydown und event_keyrepeat. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank euch beiden.
BladeRunners Code funktioniert super. Habe ihn schon entsprechend angepasst. PolledInput habe ich jetzt nicht ausprobiert. Wenns nicht für GUI-Anwendungen gedacht ist, dann benutz ich es auch dort nicht. Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group