Da in letzter Zeit viele Leute sich an Pge versuchen, aber schon an etwas einfachen wie ein Menü scheitern, zeige ich euch heute wie man ein Menü auf 2 Arten erstellen kann. Los geht's.
Typ 1: Standard Lua Menü
Am einfachsten und anpassbarsten ist ein Menü welches komplett in Lua geschrieben wird, das garantiert auch eine gute Performance.
Hier mal wieder ein Wall of Code, einfach in die script.lua reinschieben:
-- Create some colors
red = pge.gfx.createcolor(255, 0, 0)
blue = pge.gfx.createcolor(0, 0, 255)
black = pge.gfx.createcolor(0, 0, 0)
-- Load a font, 16 pixels in height, to VRAM
verdana16 = pge.font.load("verdana.ttf", 16, PGE_RAM)
-- Check the font loaded correctly
if not verdana16 then
error("Failed to load font: verdana.ttf")
end
menu = {"BUTTON","NOCH EIN BUTTON","EXIT"}
FILE_INDEX = 3
INDEX_MIN = 1
INDEX_MAX = #menu
-- Loop with exit requested
while pge.running() do
-- Update controls
pge.controls.update()
-- Start drawing
pge.gfx.startdrawing()
-- End drawing
pge.gfx.clearscreen(black)
-- Activate the font for drawing
verdana16:activate();
for index,entry in ipairs(menu) do
if index == FILE_INDEX then
verdana16:print(100, index * 20, blue,entry)
else
verdana16:print(100, index * 20, red,entry)
end
end
if pge.controls.pressed(PGE_CTRL_UP) and FILE_INDEX > INDEX_MIN then
FILE_INDEX = FILE_INDEX - 1
elseif pge.controls.pressed(PGE_CTRL_DOWN) and FILE_INDEX < INDEX_MAX then
FILE_INDEX = FILE_INDEX + 1
end
if pge.controls.pressed(PGE_CTRL_CROSS) then
if FILE_INDEX == 1 then
--mach zeug
elseif FILE_INDEX == 2 then
--mach anderes zeug
elseif FILE_INDEX == 3 then
--exit zeug
end
end
-- End drawing
pge.gfx.enddrawing()
-- Swap buffers
pge.gfx.swapbuffers()
end
menu = {"BUTTON","NOCH EIN BUTTON","EXIT"}
FILE_INDEX = 1
INDEX_MIN = 1
INDEX_MAX = #menu
"menu" ist ein table in dem wir unsere Menüpunkte definieren, welche später angezeigt werden.
FILE_INDEX ist der grade ausgwählte Menüpunkt.
INDEX_MIN und INDEX_MAX sind dazu da um zu verhinder das man aus dem Menü rauskommt.
for index,entry in ipairs(menu) do
if index == FILE_INDEX then
verdana16:print(100, index * 20, blue,entry)
else
verdana16:print(100, index * 20, red,entry)
end
end
Die ipairs Schleife loopt im angebenen table durch alle entrys(inhalte) durch, entry stellt das gradige element dar also unseren Text für den Menüpunkt. index ist die Nummer des Menüpunkts.
Was wir hier tun ist einfach durch alle Elemente durchloopen und falls ein Element der Auswahl entspricht es mit einer anderen Farbe zu zeichnen. Wir multiplizieren den index mit 20 damit alle Menüpunkte schön untereinander angezeigt werden.
Mein Gott das war viel Text. Ich hoffe ihr versteht das.
if pge.controls.pressed(PGE_CTRL_UP) and FILE_INDEX > INDEX_MIN then
FILE_INDEX = FILE_INDEX - 1
elseif pge.controls.pressed(PGE_CTRL_DOWN) and FILE_INDEX < INDEX_MAX then
FILE_INDEX = FILE_INDEX + 1
end
Das hier ist eigentlich das Kernstück der Auswahl des Menüs. Wenn wir rauf/runter drücken wird von FILE_INDEX 1 hinzu/weg gezählt. Ausserdem wird mittels INDEX_MIN und INDEX_MAX überprüft ob wir nicht schon am Anfang oder am Ende des Menüs sind.
if pge.controls.pressed(PGE_CTRL_CROSS) then
if FILE_INDEX == 1 then
--mach zeug
elseif FILE_INDEX == 2 then
--mach anderes zeug
elseif FILE_INDEX == 3 then
--exit zeug
end
end
Das is eigentlich ziemlich selbsterklärend. Wir checken bei welchen Menüpunkt wir sind und machen dementsprechendes Zeug.
Lua Hausübung: macht ein Menü welches 2 verschiedene Sounds abspielen kann.
Vlf Tut folgt, bin verdammt müde. Wer Rechtschreibfehler findet darf sie behalten.