Bien! en la última entrada vimos como controlar nuestra nave por teclado. Ahora vamos a hacer un paréntesis para ver un elemento fundamental en nuestro código, las Tablas.
Hasta ahora hemos utilizado variables simples y habrás visto que cada vez necesitamos más.
Podemos continuar sólo con variables, sin embargo, aun tenemos que añadir muchos elementos en nuestro juego: enemigos, asteroides, disparos, bonus, … todos ellos requieren variables para almacenar coordenadas, estado, imagen, vidas… Para ayudarnos a organizar mejor nuestro código y programar con más comodidad tenemos las Tablas.
Podemos decir que una tabla es un contenedor de variables. Veamos un ejemplo.
En nuestra función xloadobjs tenemos este código:
player1 = love.graphics.newImage("recursos/PNG/playerShip1_blue.png")
player1W = player1:getWidth()
player1H = player1:getHeight()
player1x=(WINDOWW-player1W)/2
player1y=WINDOWH-player1H-40
player1v = 300
Tenemos 6 variables asociadas al player1. Podemos agruparlas así:
player1 = {} -- creamos tabla player1
player1.image = love.graphics.newImage("recursos/PNG/playerShip1_blue.png") -- cargamos la imagen de la nave
player1.W = player1.image:getWidth() -- obtenemos ancho de imagen
player1.H = player1.image:getHeight() -- "" alto de imagen
player1.x = (WINDOWW-player1.W)/2 -- definimos coordenada X
player1.y = WINDOWH-player1.H-40 -- definimos coordenada Y
player1.v = 300 --velocidad de la nave
Con la instrucción player1 = {} hemos creado la tabla player1.
Para añadir y utilizar variables de esa tabla se escribe el nombre de la tabla y el nombre de la variable separadas por un punto:
player1.image
player1.W
player1.H
…
Con esta nomenclatura es mucho más sencillo entender el código y queda mas claro a que objeto pertenece cada variable.
Vamos a hacer lo mismo con el background, tenemos el código:
background = love.graphics.newImage('recursos/Backgrounds/clouds.png')
backgroundW = background:getWidth()
backgroundH = background:getHeight()
Declaramos Tabla background e iniciamos las variables:
background = {}
background.image = love.graphics.newImage('recursos/Backgrounds/clouds.png')
background.W = background.image:getWidth()
background.H = background.image:getHeight()
Recuerda cambiar el resto de llamadas a las variables por las nuevas en Tablas.
El código completo queda así:
function xInit()
print("altaruru intro a love2d")
print("ESCAPE TO QUIT")
-- recupera dimensiones de la ventana
WINDOWH = love.graphics.getHeight()
WINDOWW = love.graphics.getWidth()
end
function xloadobjs()
background = {}
background.image = love.graphics.newImage('recursos/Backgrounds/clouds.png')
background.W = background.image:getWidth()
background.H = background.image:getHeight()
player1 ={}
player1.image = love.graphics.newImage("recursos/PNG/playerShip1_blue.png")
player1.W = player1.image:getWidth() -- ancho de la nave
player1.H = player1.image:getHeight() -- alto de la nave
player1.x=(WINDOWW-player1.W)/2 -- posicion inicial x
player1.y=WINDOWH-player1.H-40 -- posicion inicial y
player1.v = 300 --velocidad de la nave
print("(x,y) --> " .. player1.x .. "," .. player1.y)
end
function love.load()
xInit()
xloadobjs()
end
function love.draw()
-- Draw background
love.graphics.setColor(255, 255, 255)
love.graphics.draw(background.image, 0, 0, 0, WINDOWW/background.W, WINDOWH/background.H)
-- Draw player
love.graphics.draw(player1.image, player1.x, player1.y)
end
function xmoveplayer(x, y, dt)
player1.x = player1.x + (x * player1.v * dt)
end
function love.update(dt)
if left_down then
xmoveplayer(-1,0,dt)
end
if right_down then
xmoveplayer(1,0,dt)
end
end
function love.keypressed(key)
if key == 'left' then
left_down = true
elseif key == 'right' then
right_down = true
end
if key == " " then
print("space pressed")
end
if key == "escape" then
love.event.quit()
end
end
function love.keyreleased(key, unicode)
if key == 'left' then
left_down = false
elseif key == 'right' then
right_down = false
end
end
function love.quit()
print("¡Hasta pronto!")
end
Próxima entrada, lasers!! añadiendo armamento.
Saludos!!