KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: Menuproblem mit lua
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Leute ;),
hab vorn paar Tagen mit lua angefangen und wollte mal versuchen ein einfaches Homebrew zu programmieren.
Erstmal mein Code:

menupunkt1 = Image.load("menupunkt1.png")
menupunkt1high = Image.load("menupunkt1ausgwt.png")

menupunkt2 = Image.load("menupunkt2.png")
menupunkt2high = Image.load("menupunkt2ausgwt.png")

menupunkt3 = Image.load("menupunkt3.png")
menupunkt3high = Image.load("menupunkt3ausgwt.png")

menuback = Image.load("menubg.png")

menupos = 1

farbe = Color.new(255,255,255)

while true do

pad = Controls.read()

screen:blit(0,0,menuback,true)

if pad:down () and menupos < 3 then
menupos = menupos + 1
end

if pad:up () and menupos > 1 then
menupos = menupos - 1
end

if menupos > 3 then
menupos = 1
end

if menupos < 1 then
menupos = 3
end

if menupos == 1 then
screen:blit(150,80,menupunkt1high,true)
else screen:blit(150,80,menupunkt1,true)
end


if menupos == 2 then
screen:blit(150,145,menupunkt2high,true)
else screen:blit(150,145,menupunkt2,true)
end

if menupos == 3 then
screen:blit(150,210,menupunkt3high,true)
else screen:blit(150,210,menupunkt3,true)
end

screen:print(1,1,menupos.." ", farbe)

screen.waitVblankStart()
screen:flip()
end


Nun zu meinem Problem:
Erst habe ich mich gewundert warum er nicht funktioniert dann habe ich mir mal den Wert menupos anzeigen lassen und gemerkt das der Wert beim drücken von pad:up/pad:down rasend schnell ansteigt anstatt immer nur 1 dazu zuzählen...
Würde mich sehr freuen wenn mir ein erfahrener User zeigen könnte wie man dieses Prob. behebt. :D
MfG
das liegt daran das daß system rasend schnell die datei durchläuft und wieder von vorne anfängt, und da man nicht nur eine microsekunde klicken kann zählt er es ganz oft.

das ganze lässt sich vielleicht mit einem System.sleep(100) beheben, das lässt das system kurz halten. die 100 sind 0,1 sekunde, den wert kannst du beliebig ändern (1000 sind immer 1 sekunde)

ich hoffe das hilft dir bei deinem problem
nein, du darfst nur dann den wert änderen wenn:
Am anfang:
old = false

Im main:
new = padBig Grinown ()
if new != old then
blablaba
end

old = new

willkommen im forum.
Sorry Lett1 wenn ich nochmal störe aber ich verstehe deinen Lösungsweg nicht ganz. Wäre nett wenn du ihn ein bisschen genauer beschreiben könntest
Trotzdem danke für die schnellen Antworten Smile

P.S. mit System.sleep kam bei meinem Luaplayer für win immer ne Fehlermeldung
Wenn du die Taste gedrückt hälst dann sind old und new gleich, wenn du in nur kurz drückst dann nicht und somit wird das in der if anweisung ausgeführt.
Klingt etz warscheinlich echt beschränkt aber könntest du mir als Beispiel des mal in meinen code einbauen...
Ich bekomm des einfach nicht hin :]
Spoiler: (anzeigen)
Müsste gehen, ich programmier allerdings nicht in luaplayer sondern pge also sind syntaxfehler eventuell vorhanden.
Der Luaplayer für Windows ist im allgemeinen viel zu schnell...
...war bei meinem ersten Menü auch so, bei Pong auch.
System.sleep kennt er nicht, weil er 'System' nicht versteht.
Auf der PSP geht wahrscheinlich also alles, wie du es haben willst.

thumb
Auf der PSP kannst du Screen.WaitVblanStart() für eine kleine Pause benutzen:
Beispiel:
Screen.WaitVblankStart(60)
würde die PSP jetzt für eine Sekunde warten lassen.

Der Weg Lett1 funktioniert nicht da er C Syntax benutzt hat.
In Lua sieht es ungefähr so aus:

Code:
oldpad = Controls.read()

while true do

pad = Controls.read()

if pad ~= oldpad then
--hier kommen jetzt deine Tasten abfragen hin
end

oldpad = pad

end

was is daran c syntax?

Naja deine Methode hab ich ihm auch schon beschrieben, hat er aber nicht verstanden.
Ich habe meinen Code nochmal ziemlich umgeschrieben und mein Prob mit Screen.WaitVblankStart() gelöst.
Danke euch allen für die Hilfe ohne euch hätte es warscheinlich noch länger gedauert^^ Wink
Referenz-URLs