Anuncios Google

[SOLUCIONADO] ayuda urgente lua!!! [SOLUCIONADO]

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í.


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.

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

Imagen de DeViaNTe

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

Imagen de trom_us

y si esto

y si esto

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

lo cambias por esto

function dmenu()
 while true do
   if opcion == 1 then 
     screen:blit(0,0,actualizar)
     break
   end
   if opcion == 2 then
     screen:blit(0,0,aplicaciones)
     break
   end
   if opcion == 3 then
    screen:blit(0,0,juegos)
     break
   end
   if opcion == 4 then
     screen:blit(0,0,musica)
     break
   end
   if opcion == 5 then
     screen:blit(0,0,plugin)
     break
   end
   if opcion == 6 then
     screen:blit(0,0,temas)
     break
   end
   if opcion == 7 then
     screen:blit(0,0,salir)
     break
   end
 end
end

o esto

function dmenu()
   if opcion == 1 then 
     screen:blit(0,0,actualizar)
   elseif opcion == 2 then
     screen:blit(0,0,aplicaciones)      
   elseif opcion == 3 then
     screen:blit(0,0,juegos)
   elseif opcion == 4 then
     screen:blit(0,0,musica)
   elseif opcion == 5 then
     screen:blit(0,0,plugin)
   elseif opcion == 6 then
     screen:blit(0,0,temas)
   elseif opcion == 7 then
     screen:blit(0,0,salir)
   end
end

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.

 

Imagen de DeViaNTe

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

Imagen de moikop

Muchas gracias a ti tambien

Muchas gracias a ti tambien Trom_us!!!

ahore se un poco mas de lua :)

saludos!!

Imagen de moikop

MUCHAS GRACIAS!!!! un

MUCHAS GRACIAS!!!!

un saludo!

Imagen de trom_us

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.

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.