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!!

Deja tu comentario