tengo este codigo:
actualizar = Image.load("img/menu/3.png")
salir = Image.load("img/menu/2.png")
aplicaciones = Image.load("img/menu/4.png")
juegos = Image.load("img/menu/5.png")
musica = Image.load("img/menu/6.png")
plugin = Image.load("img/menu/7.png")
temas = Image.load("img/menu/8.png")
sub = Image.load("img/menu/sub.png")
oldpad = Controls.read()
opcion = 1
function menu()
if opcion == 1 then
screen:blit(0,0,actualizar)
end
if opcion == 2 then
screen:blit(0,0,aplicaciones)
end
if opcion == 3 then
screen:blit(0,0,juegos)
end
if opcion == 4 then
screen:blit(0,0,musica)
end
if opcion == 5 then
screen:blit(0,0,plugin)
end
if opcion == 6 then
screen:blit(0,0,temas)
end
if opcion == 7 then
screen:blit(0,0,salir)
end
if pad:down() and not oldpad:down() then
if opcion == 1 then
opcion = 2
end
end
if pad:up() and not oldpad:up() then
if opcion == 2 then
opcion = 1
end
end
if pad:down() and not oldpad:down() then
if opcion == 2 then
opcion = 3
end
end
if pad:up() and not oldpad:up() then
if opcion == 3 then
opcion = 2
end
end
if pad:down() and not oldpad:down() then
if opcion == 3 then
opcion = 4
end
end
if pad:up() and not oldpad:up() then
if opcion == 4 then
opcion = 3
end
end
if pad:down() and not oldpad:down() then
if opcion == 4 then
opcion = 5
end
end
if pad:up() and not oldpad:up() then
if opcion == 5 then
opcion = 4
end
end
if pad:down() and not oldpad:down() then
if opcion == 5 then
opcion = 6
end
end
if pad:up() and not oldpad:up() then
if opcion == 6 then
opcion = 5
end
end
if pad:down() and not oldpad:down() then
if opcion == 6 then
opcion = 7
end
end
if pad:up() and not oldpad:up() then
if opcion == 7 then
opcion = 6
end
end
if pad:down() and not oldpad:down() then
if opcion == 7 then
opcion = 1
end
end
if pad:cross() and opcion== 7 then
System.Quit()
end
end
while true do
screen:clear()
pad = Controls.read()
menu()
screen.waitVblankStart()
oldpad = pad
screen.flip()
end
y el problema es que no andan los controles!! se queda en la primera imagen!!!
necesito ayuda porfavor!!!
saludos y gracias de antemano.
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.
No preguntes por MP, mejor pregunta aquí.
prueba asi
cambia el screen.flip() del bucle while true do o sea quitalo y ponlo al fin de tus funciones asi que solo quede en el bucle el screen.waitVblankStart igual pero sin screen.flip ese es el problema no otro..................................................................................................saludos desde México.........................................................................................com
QUE CACAO
Dios men, y mira que creo k yo hago las cosas complicadas pero tu...
Procura trabajar de manera ORDENADA, los comentarios, no se ven, y no hacen daño a nadie... Y procura hacer mejores rutinas para no hacer mil if's, si con dos bastan...
--CARGAR IMAGENES
actualizar = Image.load("img/menu/3.png")
salir = Image.load("img/menu/2.png")
aplicaciones = Image.load("img/menu/4.png")
juegos = Image.load("img/menu/5.png")
musica = Image.load("img/menu/6.png")
plugin = Image.load("img/menu/7.png")
temas = Image.load("img/menu/8.png")
sub = Image.load("img/menu/sub.png")
--PREPARAR VARIABLES
oldpad = Controls.read()
opcion = 1
--FUNCION DIBUJAR MENU
function dmenu()
if opcion == 1 then screen:blit(0,0,actualizar); end
if opcion == 2 then screen:blit(0,0,aplicaciones); end
if opcion == 3 then screen:blit(0,0,juegos); end
if opcion == 4 then screen:blit(0,0,musica); end
if opcion == 5 then screen:blit(0,0,plugin); end
if opcion == 6 then screen:blit(0,0,temas); end
if opcion == 7 then screen:blit(0,0,salir); end
end
--Leer controles menu: arriba / abajo / cruz...
function cmenu()
-- Incrementar / Decrementar al pulsar Arriba / Abajo.
if pad:down() and not oldpad:down() then opcion = opcion + 1; end
if pad:up() and not oldpad:up() then opcion = opcion - 1; end
-- Eh! no nos pasemos del limite del menu!
if opcion <= 0 then opcion = 7; end
if opcion >= 8 then opcion = 1; end
end
--Bucle principal del programa
while true do
screen:clear()
pad = Controls.read()
cmenu() -- detectar arriba / abajo
dmenu() -- dibujar menu actual
if pad:cross() and not oldpad:cross() then
--Aqui acciones al pulsar cruz...
if opcion == 7 then System.Quit(); end
end
screen.waitVblankStart()
screen.flip()
oldpad = pad
end
Y ahora, el más dificil todavía... reduciendo el código a la mínima expresión:
--CARGAR IMAGENES
imagenes = { }
table.insert(imagenes,Image.load("img/menu/3.png"));
table.insert(imagenes,Image.load("img/menu/4.png"));
table.insert(imagenes,Image.load("img/menu/5.png"));
table.insert(imagenes,Image.load("img/menu/6.png"));
table.insert(imagenes,Image.load("img/menu/7.png"));
table.insert(imagenes,Image.load("img/menu/8.png"));
table.insert(imagenes,Image.load("img/menu/2.png"));
sub = Image.load("img/menu/sub.png")
--PREPARAR VARIABLES
oldpad = Controls.read()
opcion = 1
--Bucle principal del programa
while true do
screen:clear()
pad = Controls.read()
-- Incrementar / Decrementar al pulsar Arriba / Abajo.
if pad:down() and not oldpad:down() then opcion = opcion + 1; end
if pad:up() and not oldpad:up() then opcion = opcion - 1; end
-- Eh! no nos pasemos del limite del menu!
if opcion <= 0 then opcion = 7; end
if opcion >= 8 then opcion = 1; end
screen.blit(0,0,imagenes[opcion]);
if pad:cross() and not oldpad:cross() then
--Aqui acciones al pulsar cruz...
if opcion == 7 then System.Quit(); end
end
screen.waitVblankStart()
screen.flip()
oldpad = pad
end
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
y si esto
y si esto
lo cambias por esto
o esto
acelerarias el programa o almenos esa parte en un 900%. (WinSHELL TEAM-CODER)
cualquiera de las dos te a un rendimiento excelente, pero deven usarse segun la sircunstancia.
-
while-break es una tecnica muy usada en WinSHELL, y elseif es mas tradicional. no es una mejor que la otra, solo son tecnicas que aprenderas a usar segun la sircusntancia. yo uso ambas.
bueno te lo digo. con el while-break, puedes probar el codigo por separado, e incluirlo sin modificar el programa actual.
a diferencia del elseif, que para probarlo por separado, lo deves reescribir, y para añadirlo a una cadena elseif, deves reprogramarlo otravez. llevandote tiempo circunstancial. no una vida claro..XD. pero si tu codigo no cambia, aumenta o es variable, usa elseif, de lo contrario usa el while-break.
aunque nuestro amigo tiene mucho codigo por depurar.
verda DeViaNTe. XD.
GuinXell aprender mas...
Jejejej!
Cierto cierto, pero no creo que su programa necesitara excesivo "rendimiento", en cambio el Motor RPG que estoy haciendo necesito mejorar bastante el rendimiento en el codigo con los ifs jejeje, ya aceleré todo lo que es la parte de Image.blit, que no veas lo que traga a la que lo separas en dos bucles...
La verdad es que soy novatillo en lua, llevo no mas de una semana en el tema, y 3 o 4 dias en el motor rpg... pero weno, vengo de otros lenguajes de programación y x eso no tengo problema en entender este.
Para condiciones if, tu metodo while true do break end... si solo necesitas ejecutar 1 ciclo, no es más sencillo, quitarle el while true ?
Vamos, hacer un bloque...
do
if opcion == 1 then blabla break; end
if opcion == 2 then blabla break; end
end
amos creo k no es necesario un while true, para un solo ciclo
Tomaré apuntes de tu aporte, y lo implementaré en posteriores versiones del motor RPG ;)
Thx Trom_Us, ya me queda algo menos que aprender :)
En las primeras versiones de mi motor, se ralentizaba bastante, al añadir varios sprites, pero ahora, ya puedes meter tantos como quieras, y si mejoro mas el codigo, pues eso, mas capas de sprites y efectos de iluminación, pq no?
Edito: Por cierto, no creo que muchos coders se preocupen por el rendimiento de sus aplicaciones, y mucho menos que depuren el código una vez funciona... (me declaro en contra de dicho principio)
Si no depurara mi codigo una y otra vez, cada vez que pongo algo nuevo, el framerate decae, y de momento he conseguido un framerate asi a ojo de 60/70 fps en la futura release del motor jejeje, mientras que si siguiera usando el codigo de mi primera release en la parte de dibujado me decaía hasta 35 / 40 fps a parte de su notable sensación de ir a ratos... xD
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Muchas gracias a ti tambien
Muchas gracias a ti tambien Trom_us!!!
ahore se un poco mas de lua :)
saludos!!
MUCHAS GRACIAS!!!! un
MUCHAS GRACIAS!!!!
un saludo!
y segun
lo que estes haceiendo, puedes usar return en tu primer codigo para salir de la funcion en cada if.
hay bastantes formas de mejorar el rendimiento. pero hay que escoger la adecuada.
intenta hacerlo en tu aplicacion. y te daras cuenta el cambio radical que este sufrira..
nota que si es un codigo de 100 lineas y que el tiempo no sea relevante , no hay mucha diferencia.
a diferencia de 4000 lineas y donde el tiempo en la toma de deciciones es crusial.
nos vemos.
GuinXell aprender mas...