Hola. Soy yo otra vez, me gustaria que me corrijais un codigo programado con LUA PLAYER HM7. Es el menu de mi HB. Gracias.
--Menu de TDBD
--Almacenar imagen del menu
menu1 = Image.load("menu.png")
menu2 = Image.load("menu2.png")
menu3 = Image.load("menu3.png")
while true do
screen:clear()
pad = Controls.read()
oldpad = Controls.read()
function menu()
menu_actual = 1
if menu_actual == 1 then
screen:blit(0,0,menu1)
end
if menu_actual == 2 then
screen:blit(0,0,menu2)
end
if menu_actual == 3 then
screen:blit(0,0,menu3)
end
if pad:right() and not oldpad:right() then
menu_actual = menu_actual +1
end
if pad:left() and not oldpad:left() then
menu_actual = menu_actual -1
end
if pad:cross() and menu_actual == 1 then
dofile("./tester.lua")
end
if pad:cross() and menu_actual == 2 then
dofile("./menudump.lua")
end
if pad:cross() and menu_actual == 3 then
System.Quit()
end
end
screen.waitVblankStart()
oldpad = pad
menu()
screen.flip()
end
Traducción al español...
Eso, traduciré tu código al español xD
Cargar imagenes
Mientras verdadero hacer (es decir, siempre)
limpiar pantalla
leer controles en pad
LEER CONTROLES EN OLDPAD (wtf!)
DECLARAS FUNCION menu
()
(estas declarando a cada rato la funcion)
SETEAS MENU_ACTUAL a 1 (al estar dentro del while siempre sera 1 :S)
haces movimiento del menu, ejecuciones de scripts
fin declaracion funcion menu()
espera de sincronia vertical
oldpad=pad
menu() (wtf?, llamas menu luego de sincronizar y luego de hacer oldpad=pad?)
screen.flip()
fin
Vale, como puedes ver, necesitas primero plantear una estructura correcta
Primero, al poner olpad=controls.read() no servira de nada hacer oldpad=pad, pues reemplazaras su valor, deberias ponerlo fuera del bucle como una declaración inicial.
Luego, no se porque ultimamente veo cosas de ese tipo (declarar funciones dentro de un bucle), las funciones que no serán modificadas durante el transcurso del programa, SIEMPRE se declaran 1 sola vez, al estar dentro del while, la declaras por cada pasada...
menu_actual=1, estas diciendo que menu_actual sea 1 cada que pase, por lo tanto, nunca cambiara, eso al igual que el oldpad=controls.read() es una declaracion inicial, ponla fuera del bucle y de la funcion...
Ahora, el resto de cosas, primero relizas el programa en si, en tu caso, la llamada a la funcion menu(), luego va el oldpad=pad, para que almacene los datos de pad de esa iteración (vuelta), luego debes imprimir todo en pantalla (flip) y por ultimo el sincronismo vertical (waitvblankstart) para saber cuando continua con el siguiente frame.
Un saludo
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
XD Ereres tremendo Chimecho
XD Ereres tremendo Chimecho
Bieeen!!!
Ya funciona. Gracias amigoo. Te van 30 scenebitos de mi parte.
Saludos.
muy facil:al poner
muy facil:
al poner "menu_actual = 1" dentro del bucle, la psp siempre imprimira el menu 1, por eso lo que tienes que hacer es quitarlo del bucle y ponerlo fuera algo asi:
menu_actual = 1
while true do
saludos
PD: yo de tu pondria"limites" porque tu dices que si menu_actual es 1 que impirma eso, si es 2 lo otro y si es 3 lo otro , pero que pasa si es 4??pues que no imprimira nada. solucion:
pon eso al final del codigo:
if menu_actual>=4 then
menu_actual=1
elseif menu_actual<=0 then
menu_actual=3
end
Cual?
Explicate mejor y di cual linea esta el error o que quieres que se corrija? un saludo
El problema es que...
Te sale el "menu1" pero cuando le doy a "derecha" no sale el "menu2". Es muy raro. Espero que me puedas ayudar.
Saludos.