Programando con Love 2D – Moviendo rectángulos con el teclado

En anteriores posts ya hemos hablado de como compilar o instalar love 2D y hemos visto otros ejemplos. Simplemente recordar que como punto de partida este post viene bien:

* Programando con Love 2D rectángulos de colores en movimiento

Sin entretenernos más en eso en este post se hablará de como mover un puntito por la pantalla. Un sencillo código que puede servir de ejemplo para conocer como como mover mediante el teclado algún objeto en pantalla.

Podemos comenzar con un ejemplo muy simple que no hace nada más que mostrar en la consola la tecla que hemos pulsado y un cuadrado de 5x5px en el eje x=0 y=0:

function love.load()
        x = 0
        y = 0
end

function love.update()
end

function love.draw()
        love.graphics.setColor(0, 255, 0) -- set green color
        love.graphics.rectangle("fill", x, y, 5, 5)
end

function love.keypressed(key)
        print(key)
end

La función keypressed nos servirá en este caso simplemente para que si presionamos alguna tecla podamos ver que nombre tiene. Eso nos servirá para poder controlar cuando alguien pulsa una tecla y picar código que haga algo.

Como por ejemplo este código:

function love.load()
        x = 0
        y = 0
end

function love.update()
end

function love.draw()
        love.graphics.setColor(0, 255, 0) -- set green color
        love.graphics.rectangle("fill", x, y, 5, 5)
end

function love.keypressed(key)
        --print(key)
        if ( key == "down" ) then y = y + 10 end
        if ( key == "up" ) then y = y - 10 end
        if ( key == "left" ) then x = x - 10 end
        if ( key == "right" ) then x = x + 10 end
end

Con eso si lo guardamos en un directorio como main.lua y ejecutamos con “love .” tendría que permitir que movamos ese cuadrado de 5×5.

Cuando presionemos la tecla de abajo sumará 10 al valor de y, etc…

Esto de todos modos sirve para ir viendo como controlar el tema pero ahora mismo es de poca utilidad, es decir, hemos de fijar la pantalla a pantalla completa por ejemplo y medir cuanto tiene de alto y de ancho en el ordenador que se ejecute. En base a eso no permitir valores menores de 0 para x y no permitir valores menores de 0 para y. Lo mismo para valores superiores al ancho de la pantalla o valores superiores al alto de la pantalla.

Eso o si permitirlos y que cuando la “pulga” suba por la parte superior de repente salga abajo rollo al snake de toda la vida. Lo mismo para izquierda y derecha. Una pantalla infinita en la que se sale por un lado y se entra por el otro.

Veamos un gif y luego el código de ejemplo de algo más controlado:

Y aquí el ejemplo en código:

function love.load()
	love.window.setFullscreen(true, "desktop") -- set fullscreen
	sw, sh = love.graphics.getDimensions() -- sw screen width and sh screen height
	sw = sw - 5 -- less 5px
	sh = sh - 5 -- less 5px
	x = 0
	y = 0
end

function love.update()
end

function love.draw()
	love.graphics.setColor(0, 255, 0) -- set green color
	love.graphics.rectangle("fill", x, y, 5, 5)
end

function love.keypressed(key)
	if ( key == "down" ) then
		if ( y >= 0 and y <= sh ) then
			y = y + 10
		end
		if ( y > sh ) then
			y = 0
		end
	end

	if ( key == "up" ) then
		if ( y >= 0 and y <= sh ) then
			y = y - 10
		end 
		if ( y < 0 ) then
			y = sh
		end
        end

        if ( key == "left" ) then
                if ( x >= 0 and x <= sw ) then
                        x = x - 10
                end
                if ( x < 0 ) then
                        x = sw
                end
        end

        if ( key == "right" ) then
                if ( x >= 0 and x <= sw ) then
                        x = x + 10
                end
                if ( x > sw ) then
                        x = 0
                end
        end

end

Se puede hacer de mil formas. Esa es una que espero se entienda.

Básicamente nos podemos fijar en la tecla “down”. Aquí el codigo:

	if ( key == "down" ) then
		if ( y >= 0 and y <= sh ) then
			y = y + 10
		end
		if ( y > sh ) then
			y = 0
		end
	end

Comprobamos si la tecla presionada es down y entonces comprobamos si la variable “y” (el valor de y que es la posición de la pulga en el eje Y) es mayor o igual a 0 y es menor o igual al alto de la pantalla. En caso de que eso ocurra restará 10 al valor de Y para que se mueva abajo 10px. Añadimos otra comprobación cuando se presiona la tecla que es si el valor de “y” es mayor del valor del alto de la pantalla (sh) y entonces si eso ocurre es que el valor de “y” tendría que ser 0 (es decir, aparecer por la parte de arriba de la pantalla).

Nota: Si nos fijamos solamente se mueve cuando presionamos la tecla pero no sigue moviéndose cuando la dejamos presionada. Ahora vamos con eso

Deseamos que cuando dejemos presionada la tecla se mueva. Eso se puede hacer cambiando el código a la función update y usando love.keyboard.isDown(). Un ejemplo:

El código del ejemplo.

function love.load()
	love.window.setFullscreen(true, "desktop") -- set fullscreen
	sw, sh = love.graphics.getDimensions() -- sw screen width and sh screen height
	sw = sw - 5 -- less 5px
	sh = sh - 5 -- less 5px
	x = 0
	y = 0
end

function love.update()

        if ( love.keyboard.isDown('down') ) then

                if ( y >= 0 and y <= sh ) then y = y + 10 end
                if ( y > sh ) then y = 0 end
        end

        if ( love.keyboard.isDown("up") ) then
                if ( y >= 0 and y <= sh ) then
                        y = y - 10
                end
                if ( y < 0 ) then
                        y = sh
                end
        end

        if ( love.keyboard.isDown("left") ) then
                if ( x >= 0 and x <= sw ) then
                        x = x - 10
                end
                if ( x < 0 ) then
                        x = sw
                end
        end

        if ( love.keyboard.isDown("right") ) then
                if ( x >= 0 and x <= sw ) then
                        x = x + 10
                end
                if ( x > sw ) then
                        x = 0
                end
        end



end

function love.draw()
	love.graphics.setColor(0, 255, 0) -- set green color
	love.graphics.rectangle("fill", x, y, 5, 5)
end

function love.keypressed(key)

end

Y para rematar y hacerlo bien vamos a hacer que cuando presionamos solamente una tecla de arriba, abajo, derecha o izquierda se mueva lento aunque dejemos pulsado. Digamos que queremos que exista otra tecla que cuando se presiona al mismo tiempo que arriba, abajo, derecha e izquierda “haga que corra.

Usaremos la tecla shift para correr. Si dejasemos presionado shift+left por ejemplo pues correrá y así con el resto.

Aquí el código:

function love.load()
	love.window.setFullscreen(true, "desktop") -- set fullscreen
	sw, sh = love.graphics.getDimensions() -- sw screen width and sh screen height
	sw = sw - 5 -- less 5px
	sh = sh - 5 -- less 5px
	x = 0
	y = 0
end

function love.update()

        if ( love.keyboard.isDown('lshift') and love.keyboard.isDown('down') ) then
                if ( y >= 0 and y <= sh ) then y = y + 10 end
                if ( y > sh ) then y = 0 end
        end

        if ( love.keyboard.isDown('lshift') and love.keyboard.isDown("up") ) then
                if ( y >= 0 and y <= sh ) then y = y - 10 end
                if ( y < 0 ) then y = sh end
        end

        if ( love.keyboard.isDown('lshift') and love.keyboard.isDown("left") ) then
                if ( x >= 0 and x <= sw ) then x = x - 10 end
                if ( x < 0 ) then x = sw end
        end

        if ( love.keyboard.isDown('lshift') and love.keyboard.isDown("right") ) then
                if ( x >= 0 and x <= sw ) then x = x + 10 end
                if ( x > sw ) then x = 0 end
        end

end

function love.draw()
	love.graphics.setColor(0, 255, 0) -- set green color
	love.graphics.rectangle("fill", x, y, 5, 5)
end

function love.keypressed(key)

	if ( key == "down" ) then
		if ( y >= 0 and y <= sh ) then y = y + 10 end
		if ( y > sh ) then y = 0 end
	end

	if ( key == "up" ) then
		if ( y >= 0 and y <= sh ) then y = y - 10 end 
		if ( y < 0 ) then y = sh end
        end

        if ( key == "left" ) then
                if ( x >= 0 and x <= sw ) then x = x - 10 end
                if ( x < 0 ) then x = sw end
        end

        if ( key == "right" ) then
                if ( x >= 0 and x <= sw ) then x = x + 10 end
                if ( x > sw ) then x = 0 end
        end

end


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *