Bien, tengo una duda en Luadev.
Yo quiero que, al pulsar un botón, por ejemplo el círculo, una imagen aparezca de la izquierda y se vaya deslizando hasta ocupar la pantalla. ¿Cómo hago eso?
A ver, pensemos por un momento, que nos hace falta:
Lo que quieres es que al darle a un botón aparezca una imagen desde la izquierda y se mueva a la derecha. Muy bien, ya lo tienes hecho, ahora solo lo tienes que pasar al código.
Primero, define una variable que cambiará al pulsar el botón que quieres, así mostraremos nuestra imagen. Te recomiendo un booleano:
mover =false-- Cambiará al pulsar el botón
Ahora definimos una variable, que será la que cambie la posición de la imagen cuando la variable mover sea cierta.
x =0
Y cargamos nuestra imagen:
imagen = image.load("mi imagen.png")
Ahora vamos a poner un bucle infinito para que nunca termine el programa, a menos que salgas de él al presionar el botón "Home"
whiletruedo
Comprobamos primero los botones que se han pulsado al iniciar el bucle:
controls.read()
Ahora ponemos una condición, que será la que cambie nuestra primera variable, mover, al pulsar el botón correspondiente. Yo he puesto el botón círculo, pero pon el que quieras:
if controls.press("circle")and mover ==falsethen mover =trueend
Te comento, lo que le dije es que si presionamos el botón círculo y la variable mover es falsa, definimos mover como verdadero. Si quieres reducir el código, al ser un valor booleano, puedes finirlo así (Te lo recomiendo):
if controls.press("circle")andnot mover then mover =trueend
Es lo mismo que arriba.
Ahora pon una nueva condición donde cambie la segunda variable, que si recuerdas, es la que va a cambiar la posición de la imagen:
if mover and x < imagen:width()then x = x+2end
Le he dicho a Lua que si mover es verdadero (Sería lo mismo que poner mover ==true) y la variable x es menor a la anchura de la imagen (Ya que vamos a mover la imagen de izquierda a derecha), aumente x dos píxeles.
Ahora mostramos la imagen:
imagen:blit(-imagen:width()+x, 0)
Como has visto arriba, image.width() devuelve la anchura de la imagen. Con el prefijo unario - le digo que cambie el signo, por lo que nos devuelve menos la anchura de la imagen. A esta le sumamos la variable x, que irá aumentando en cada ciclo del bucle, hasta que llegue a la anchura de la imagen y contrarestre la menos anchura de la imagen, devolviendo 0 y mostrandose la imagen completa en pantalla.
Ahora volteamos el buffer a la pantalla y cerramos el bucle:
screen.flip()
end
Se podría poner x como la anchura de la imagen, y comprobar que x sea menor que 0 para sumarle a x +2, así como mostrar la imagen con solo x, pero he preferído mostrarlo de otra forma diferente para que veas que hay más de una forma posible.
Si lo pones así ya cambia el efecto. Yo lo puse para que solo se muestre una vez al pulsar el botón circulo por primera vez (Cambiar a true un booleano cuando ya es true es una tontería)
Según tu efecto, cada vez que pulses, o continua el efecto o para.
Despues, un tercer efecto sería poner que al volver a pulsar se reinicie las variables y vuelva a reiniciar el efecto:
if controls.press("circle")then mover =not mover endifnot mover and x !=0then x =0end
pss a mi no me gusta
pss a mi no me gusta complicarme ... yo lo haria asi:
Lastima que deje la programacion :(
Mmm...
¿Y cuando la imagen no ocupe 480? Tendrías que editar ese script por cada imagen que no tenga el mismo ancho
de echo no necesita la
de echo no necesita la funcion para eso.xd
Ehm...
Y la función mover, ¿cuándo se ejecuta?
jejej se me ah pasado eso xD
jejej se me ah pasado eso xD pss me imagino que el ya a de saber como mover la imagen se me a volado ese detalle ;)
Mmm...
A ver, pensemos por un momento, que nos hace falta:
Lo que quieres es que al darle a un botón aparezca una imagen desde la izquierda y se mueva a la derecha. Muy bien, ya lo tienes hecho, ahora solo lo tienes que pasar al código.
Primero, define una variable que cambiará al pulsar el botón que quieres, así mostraremos nuestra imagen. Te recomiendo un booleano:
mover = false -- Cambiará al pulsar el botón
Ahora definimos una variable, que será la que cambie la posición de la imagen cuando la variable mover sea cierta.
x = 0
Y cargamos nuestra imagen:
imagen = image.load("mi imagen.png")
Ahora vamos a poner un bucle infinito para que nunca termine el programa, a menos que salgas de él al presionar el botón "Home"
while true do
Comprobamos primero los botones que se han pulsado al iniciar el bucle:
controls.read()
Ahora ponemos una condición, que será la que cambie nuestra primera variable, mover, al pulsar el botón correspondiente. Yo he puesto el botón círculo, pero pon el que quieras:
if controls.press("circle") and mover == false then mover = true end
Te comento, lo que le dije es que si presionamos el botón círculo y la variable mover es falsa, definimos mover como verdadero. Si quieres reducir el código, al ser un valor booleano, puedes finirlo así (Te lo recomiendo):
if controls.press("circle") and not mover then mover = true end
Es lo mismo que arriba.
Ahora pon una nueva condición donde cambie la segunda variable, que si recuerdas, es la que va a cambiar la posición de la imagen:
if mover and x < imagen:width() then x = x+2 end
Le he dicho a Lua que si mover es verdadero (Sería lo mismo que poner
mover == true
) y la variable x es menor a la anchura de la imagen (Ya que vamos a mover la imagen de izquierda a derecha), aumente x dos píxeles.Ahora mostramos la imagen:
imagen:blit(-imagen:width()+x, 0)
Como has visto arriba, image.width() devuelve la anchura de la imagen. Con el prefijo unario - le digo que cambie el signo, por lo que nos devuelve menos la anchura de la imagen. A esta le sumamos la variable x, que irá aumentando en cada ciclo del bucle, hasta que llegue a la anchura de la imagen y contrarestre la menos anchura de la imagen, devolviendo 0 y mostrandose la imagen completa en pantalla.
Ahora volteamos el buffer a la pantalla y cerramos el bucle:
screen.flip()
end
Se podría poner x como la anchura de la imagen, y comprobar que x sea menor que 0 para sumarle a x +2, así como mostrar la imagen con solo x, pero he preferído mostrarlo de otra forma diferente para que veas que hay más de una forma posible.
Un saludo ^-^
NekeOS, el nuevo shell para PSP
PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.
Sony Xperia Z1 Compact con Android 5.1.1
Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).
Puedes
En vez de
if controls.press("circle") and not mover then mover = true end
puedes usarif controls.press("circle") then mover = not mover end
Saludos!
No
Si lo pones así ya cambia el efecto. Yo lo puse para que solo se muestre una vez al pulsar el botón circulo por primera vez (Cambiar a true un booleano cuando ya es true es una tontería)
Según tu efecto, cada vez que pulses, o continua el efecto o para.
Despues, un tercer efecto sería poner que al volver a pulsar se reinicie las variables y vuelva a reiniciar el efecto:
NekeOS, el nuevo shell para PSP
PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.
Sony Xperia Z1 Compact con Android 5.1.1
Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).
Una duda
Una duda, ¿Para que se utiliza el signo de admiracion?
Saludos.
Es el operador diferente de
Es el operador diferente de en C, dice Rafa que funciona también en LuaDEV, la verdad yo no lo he probado, uso el de Lua (~=).
Ya entiendo. Gracias.
Ya entiendo. Gracias.
Mmm...
Si, LuaDEV es el único intérprete en el que funciona. Chimecho (No se si puse bien su nombre) lo utiliza en sus tutoriales, creo recordar.
NekeOS, el nuevo shell para PSP
PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.
Sony Xperia Z1 Compact con Android 5.1.1
Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).