Que tal amigos, hoy
tengo la intención de mostrar un pequeño ejemplo mostrando el uso
del gestor de escenas. El ejemplo no será nada en especial, pero
para no hacer demasiado largas las entradas del blog he preferido
hacerlo en un post aparte. Tampoco voy a entrar en demasiados
detalles con el código, lo dejo aquí esta vez mínimamente
comentado pues es muy sencillo.
El ejemplo hará uso
de tres escenas independientes que serán controladas por el gestor
de escenas.
Para el ejemplo se
hará uso de archivo escena.lua y gestorDeEscenas.lua que se vieron
es entradas anteriores:
La primera escena
hará a modo de menú y desde ella se podrá pasar a las otras dos.
La segunda escena mostrara un cuadrado en pantalla que podrá ser
movido mediante las teclas de dirección. La tercera mostrará un
círculo que se desplazará con el cursor.
Lo primero será
crear una nueva carpeta donde crear nuestro archivo main.lua, en este
mismo directorio deberemos tener también nuestros archivos
escenas.lua y gestorDeEscenas.lua.
Además de estos
archivos, también crearemos otros tres archivos más, uno por
escena. Estos archivos se llamarán: menuInicio.lua,
mueveCuadrado.lua, mueveCirculo.lua
Decir que excluyo el
código del archivo escenas.lua y gestorDeEscenas.lua que pueden ser
visitados desde los enlaces propuestos más arriba.
Y así de simple y
de sencillo, dejo aquí el código para este ejemplo.
main.lua
function love.load()
--incluimos el archivo EscenaPrueba
escena=require("EscenaPrueba")
--llamamos a la función load de la escena
escena.load()
end
function love.update(dt)
--actualizamos la escena
escena.update(dt)
end
function love.draw()
--dibujamos la escena
escena.draw()
end
menuInicio.lua
gestor=require("gestorDeEscenas")
menuInicio=gestor:nueva_escena("inicio")
--Usamos
update para detectar la tecla de opción pulsada
--Si es
una tecla de opción correcta, cambiamos a la escena escogida
function menuInicio.update(dt)
if (love.timer) then
if love.keyboard.isDown("1")
then
gestor:cambiar_escena("mueveCuadrado")
elseif
love.keyboard.isDown("2")
then
gestor:cambiar_escena("mueveCirculo")
end
end
end
--Dibujamos
el menú en pantalla
function menuInicio.draw()
love.graphics.print("Elige la escena a
cargar",300,100)
love.graphics.print("pulsando la tecla,
de opción, deseada",300,120)
love.graphics.print("1:) Mover un
cuadrado con el teclado.",300,150)
love.graphics.print("2:) Mover un círculo
con el cursor.",300,170)
love.graphics.print("En cualquier escena,
pulsa la tecla 'q' para regresar al menú.",300,200)
end
mueveCirculo.lua
gestor=require("gestorDeEscenas")
mueveCirculo=gestor:nueva_escena("mueveCirculo")
--usamos la función load para cargar los datos
de la escena
--en este caso la estructura de un círculo
function mueveCirculo.load()
circulo={120,120,40}
end
--La función show será llamada cada vez que
entremos en la escena
--y la usamos para recolocar el círculo
function mueveCirculo.show()
circulo[1]=50
circulo[2]=50
end
--En la función update recogemos la posición
del cursor
--y colocamos el círculo en esas coordenadas
function mueveCirculo.update(dt)
mX=love.mouse.getX()
mY=love.mouse.getY()
circulo[1]=mX
circulo[2]=mY
--Si pulsamos 'q' retornamos al menú
if love.keyboard.isDown("q")
then
gestor:cambiar_escena("inicio")
end
end
--Recogemos los datos actuales de círculo
--y lo dibujamos en pantalla
function mueveCirculo.draw()
x=circulo[1]
y=circulo[2]
r=circulo[3]
love.graphics.circle("fill",x,y,r,100)
end
mueveCuadrado.lua
gestor=require("gestorDeEscenas")
mueveCuadrado=gestor:nueva_escena("mueveCuadrado")
--usamos la función load para cargar los datos
de la escena
--en este caso la estructura de un cuadrado
function
mueveCuadrado.load()
cuadrado={50,50,100,100}
velocidad=8
end
--Usamos la función show para recolocar las
posiciones del cuadrado
function mueveCuadrado.show()
cuadrado[1]=50
cuadrado[2]=50
end
--Usamos update para detectar las teclas del
teclado y así
--desplazar el cuadrado
function
mueveCuadrado.update(dt)
if
love.keyboard.isDown("up")
then
cuadrado[2]=cuadrado[2]-velocidad
elseif
love.keyboard.isDown("down")
then
cuadrado[2]=cuadrado[2]+velocidad
elseif
love.keyboard.isDown("left")
then
cuadrado[1]=cuadrado[1]-velocidad
elseif
love.keyboard.isDown("right")
then
cuadrado[1]=cuadrado[1]+velocidad
--Si pulsamos la tecla
'q' regresaremos al menú
elseif
love.keyboard.isDown("q")
then
gestor:cambiar_escena("inicio")
end
end
--Recuperamos la estructura del cuadrado y
-- lo dibujamos en la pantalla
function
mueveCuadrado.draw()
x=cuadrado[1]
y=cuadrado[2]
w=cuadrado[3]
h=cuadrado[4]
love.graphics.rectangle("fill",x,y,w,h)
end
Con esto tendríamos todo el ejemplo listo para
funcionar . Se que es muy, muy sencillo, pero es más que suficiente
para hacerse una idea de lo versátil que es usar un gestor de
escenas para manejar las pantallas de nuestros pequeños juegos.
Sin nada más que decir, me despido, hasta
próxima.
No hay comentarios:
Publicar un comentario