Hallo, ich hab grad etwas, das ich nicht verstehe.
Ich habe ein Menü von Mausbedienung auf Tastenbedienung umgebaut und es tut nicht das, was ich will.
Ich möchte mit einer Variablen einen Pfeil vor den Menüeinträgen steuern. Wenn ich jetzt aber Pfeil nach oben/unten drücke, geht der Cursor aber nicht einen Eintrag rauf oder runter, sondern mehrere. Zumindest sieht es so aus.
Läuft die Schleife hier so schnell durch, dass das Key-Event bei einem Druck mehrmals ausgelöst wird? Brauche ich hier einen Timer damit das so funktioniert? Ich steh etwas auf der Leitung.
LOADBMP "bmphintergrund800600.bmp"
LOADFONT "handwriting18.bmp", 1
SETFONT 1
GLOBAL running = TRUE
GLOBAL menu_selected = 1
WHILE running = TRUE
ShowMenu()
//SHOWSCREEN
WEND
END
// ------------------------------------------------------------- //
// -=# SHOWMENU #=-
// ------------------------------------------------------------- //
FUNCTION ShowMenu:
// Diese Variablen sind als LOCAL definiert:
//
WHILE TRUE
PRINT "text 1", 300, 100
PRINT "text 2", 300, 200
PRINT "text 3", 300, 300
PRINT "ende", 300, 400
SELECT menu_selected
CASE 1
PRINT "->", 285, 100
CASE 2
PRINT "->", 285, 200
CASE 3
PRINT "->", 285, 300
CASE 4
PRINT "->", 285, 400
ENDSELECT
SHOWSCREEN
// Pfeil nach oben
IF KEY(200) = 1
DEC menu_selected, 1
IF menu_selected < 1 THEN menu_selected = 4
ENDIF
// Pfeil nach unten
IF KEY(208) = 1
INC menu_selected, 1
IF menu_selected > 4 THEN menu_selected = 1
ENDIF
// Enter
IF KEY(28) = 1
running = FALSE
RETURN
ENDIF
WEND
ENDFUNCTION // SHOWMENU
also ich hab mein menu so gelöst:
FUNCTION menu:
// Diese Variablen sind als LOCAL definiert:
//
IF menu_start = 1
IF KEY(208) = FALSE AND KEY(200) = FALSE AND KEY(28) = FALSE
item_press = 0
ENDIF
PRINT menu_item, 0,0
abstand = 0
DIM menu_items$[4]
menu_items$[0]="Neues Spiel"
menu_items$[1]="Spiel Laden"
menu_items$[2]="Optionen"
menu_items$[3]="Beenden"
FOR menu_count = 0 TO 3
PRINT menu_items$[menu_count], 50, 130+abstand
abstand = abstand+25
NEXT
SPRITE 1, 10, 135+menu_y
IF KEY(208) AND item_press = 0
menu_item = menu_item + 1
item_press = 1
IF menu_item < 5
menu_y = menu_y + 25
ELSE
menu_y = 0
menu_item = 1
ENDIF
ENDIF
IF KEY(200) AND item_press = 0
menu_item = menu_item - 1
item_press = 1
IF menu_item > 0
menu_y = menu_y - 25
ELSE
menu_y = 75
menu_item = 4
ENDIF
ENDIF
IF KEY(28) AND item_press = 0
menu_start = 0
ENDIF
ELSE
SELECT menu_item
CASE 1
BLACKSCREEN
STOPMUSIC
spiel("Hiro")
CASE 2
CASE 3
BLACKSCREEN
STOPMUSIC
optionen()
CASE 4
END
ENDSELECT
ENDIF
ENDFUNCTION // MENU
vielleicht konnt ich dir ja helfen
Richtig. KEY() gibt aus, ob die Taste gedrück ist (also auch gehalten). Es gibt einen Code hier, der ein Event gibt, wenn die Taste losgelassen wird
*such, such*
http://www.glbasic.com/forum/viewtopic.php?pid=2908#p2908
Danke, Danke. Jetzt ist mir ein Licht aufgegangen.