Anuncios Google

[SOLUCIONADO]Como Puedo Hacer un limite de menu lua

Tengo este menu lua pero cuando cambio y llego al final no tienes limite sigue el cambio pero en pantalla negra como puedo hacer un limite

script

miImagen1=Image.load("menu1.png")
miImagen2=Image.load("menu2.png")
miImagen3=Image.load("menu3.png")
miImagen4=Image.load("menu4.png")
 
current = 1
 
while true do
pad = Controls.read()
screen:clear()
 
if current == 1 then 
Image:blit(0,0,miImagen1)
end
 
if current == 2 then 
Image:blit(0,0,miImagen2)
end
 
if current == 3 then 
Image:blit(0,0,miImagen3)
end
 
if current == 4 then 
Image:blit(0,0,miImagen4)
end
 
if pad:up() then
current = current - 1
end
 
if pad:down() then
current = current + 1
end 
 
if pad:cross() and current == 1 then
dofile("index.lua")
end
 
if pad:cross() and current == 2 then
dofile("Multiplayer.lua")
end
 
if pad:cross() and current == 3 then
dofile("option.lua")
end
 
if pad:cross() and current == 4 then
System.Quit()
end
 
screen.waitVblankStart(5)
screen.flip()
end

 


CrackDevice!!! - http://crackdevice.com Solo colabora, entra y aclara sus dudas, todos sobre tu iDevice.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de va2ron1

Solucionado

Gracias A todos los que me ayudaron

Imagen de pspgorrister

Simplificando con arrays

Supongo que Lua permite arrays y que serán con índice entre corchetes, pero vamos aunque cambie la sintaxis, esto es un consejo, porque este codigo con 20 opciones se vuelve infumable con tanto if then. Voy a hacerlo sin tener en cuenta la sintaxis (vuelvo a repetir que no se Lua), pero es para que se entienda la idea

total_opciones = 4;
 
for n = 1 to total_opciones do begin
      miImagen[n] = Image.Load("menu" .. n ..".png");
end
current = 1;
 
--blah blah blah
 
 
if pad:cross() then
  --Aquí se pueden poner los "if current" o usar un "case"
end
 
if pad:up() then
   current = current -1;
   if current < 1 then
      current = total_opciones; --Esto hace un menu "cíclico"
   end
end;
 
if pad:down() then
   current = current +1;
   if current > total_opciones then
      current = 1;
   end
end;
 
Image:blit(current,0,miImagen[current])

De esta manera se simplifica mucho el código.

  • Por un lado tenemos versatilidad, para añadir más opciones basta con cambiar la variable "total_opciones" y luego añadir la acción al  "if pad:cross()"
  • Se teclea bastante menos y el código es más fácil de depurar.

 

Por ultimo, se podría usar un array multimensional, que tuviera una relación imagen, texto, acción, etc. , de tal forma que las opciones solo se añadirian a ese array y no habría que tocar más el código. Aunque como no se el funcionamiento de Lua con arrays relacionales/multidimensionales, no pongo nada porque sino voy a liarla solo Risa


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Peuedes usar esto. --Si

Peuedes usar esto.

--Si pulsas .... entonces...
if pad:down() and oldpad:down() == pad:down() and opcion== 1 then
opcion = 2
end
 
if pad:up() and oldpad:up() ~= pad:up() and opcion== 2 then
opcion = 1
end
 
if pad:down() and oldpad:down() ~= pad:down() and opcion== 2 then
opcion = 3
end
 
if pad:up() and oldpad:up() ~= pad:up() and opcion== 3 then
opcion = 2
end 


                                                                          No cuesta nada agradecer!!!

Imagen de el__QAT

Sencillo

Añade esto:

--Esto va junto a los controles de current--
 
if current == 5 then
current = 1
end
 
if current == 0 then
current = 4
end

Así si estas en el final del menu y presinonas abajo de nuevo pasará automaticamente a la ocpión uno y viceversa.

O puedes añadir esto:

--Esto va en el mismo lugar que el anterior--
 
if current == 5 then
current = 4
end
 
if current == 0 then
current = 1
end

Así no pasaras a ninguna opción, solo quedará en la que esta actualmente.


Tutorial: Fabricando nuestro propio micrófono para la PSP.

Exclusivo de PSP.Scenebeta.com

Imagen de P22

Yo usaría esto : if current

Yo usaría esto :

if current < 4 and pad:down() then
current = current + 1
end
if current > 1 and pad:up() then
current = current - 1
end


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Arkanist

También

if current <= 4 and pad:down() then
    current = current + 1
else
    current = 1
end
if current >= 1 and pad:up() then
    current = current - 1
else
    current = 4
end

Así si llegas al final, vuelves al principio.

Saludos.

Imagen de P22

como pones que si no es

como pones que si no es cierto, current =1, si no pulsas abajo se va a poner a uno...

Imagen de pspgorrister

Uhmmm

Ese código va fallar, fíjate en la primera condición, cada vez que se pulse arriba (o mejor dicho cada vez que NO se pulse abajo), current se pondrá a 1


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de Arkanist

Tienes razón...

Me equivoqué.

Es:

if pad:down() then
if current <= 4 then
current = current + 1
else
current = 1
end
end
if pad:up() then
if current >= 1 then
current = -1
else
current = 4
end end

el fallo es que puse los controles dentro del if con else.

Saludos.

 

Imagen de pspgorrister

Tampoco va a ir

Tienes mal la condición cuando current sea 4, se podrá a 5, lo cual dará error porque sólo hay 4 opciones.

 

Aquí aprovecho el código del autor del post (aunque no esté relacionado con esta respuesta) para hacer un comentario, porque veo que la mayoría tenéis la manía de usar los llamados número mágicos.

Un número mágico en programación, es una de las cosas que se tienen que evitar, con ellos, modificar o ampliar código puede ser una pesadilla, sobretodo si el que lo hace no es el autor original.

Un ejemplo de número mágico, es el 4 usado en el código, ese 4 se usa al comparar el up(), el down(),  el cross(). Y ese número, no nos dice nada si miramos el código, aún peor. ¿que pasa si añadimos 1 opción más?. En el caso de el código de Arkanist (por poner un ejemplo), tendremos que modificar 2 lineas cambiado ese 4 por un 5. y eso habrá que hacerlo en muchas partes de código.

¿Cómo evitar los números magicos?. Fácil, cuando tengas un límite de algo, usa una variable o constante (según el caso) para especificarla. de esta forma sólo tendrás que cambiar el valor de dicha variable (como en el código que he puesto más arriba, que encima uso un bucle para leer las imágenes, sin preocuparme de cuantas son).

total_opciones = 4

 


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de Arkanist

Ok...

De nuevo erré, en vez de "<=" debí poner sólo "<".

Aunque hace un poco de tiempo que no toco la programación, haber si cuando se acabe de todo el curso vuelvo, se puede usar un array con las opciones para luego usar "#" para ir cambiando de opción, pero no lo recuerdo muy bien, tendria que volver a mirarme el codigo fuente de mi último juego.

Saludos.

PD: te doy 20 scenebitos por las correcciones y las explicaciones ;)

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.