Ir al contenido principal

Quiéres estos diseños en tu ropa o en diferentes productos?

Publicidad

Cómo usar el teclado con Love2D

 


Un saludo a todos, hoy les explicaré el uso del teclado para controlar nuestro videojuego. Hay dos maneras de que nuestro código interactúe con el teclado y verificar que teclas han sido presionadas o liberadas, En las entradas anteriores expliqué el uso de las tres funciones principales de Love2D, load(), update(), y draw(). Pero estas no son las únicas, para utilizar el teclado también tenemos love.keypressed() y love.keyreleased(), quedando entonces el código principal de Love2D de esta manera.

function love.load()

end

function love.keypressed(key,scancode,isrepeat)

end

function love.keyreleased(key,scancode)

end

function love.update(dt)

end

function love.draw()

end

La función keypressed() verifica el valor de la tecla que esté presionada en ese momento y actualiza los parámetros key, scancode, isrepeat.

El parámetro "key" es el valor que nos devuelve Love2D de la tecla que ha sido presionada para que lo usemos en nuestro código, es de tipo texto y lo utilizamos de esta manera:

function love.keypressed(key)

    if key == "a" then

        print("se presionó la tecla, a")

    end

end

El parámetro "scancode" según la documentación dice así. Los códigos de escaneo son independientes de la distribución del teclado, por lo que el código de escaneo "w" se generará si se presiona la tecla en el mismo lugar que la tecla "w" en un teclado QWERTY americano, sin importar la etiqueta de la tecla o los ajustes del sistema operativo del usuario.

El uso de códigos de escaneo, en lugar de códigos de tecla, es útil porque los teclados con diseños que difieren de los diseños de EE. UU./ Reino Unido pueden tener teclas que generan códigos de tecla 'desconocidos', pero los códigos de escaneo aún se detectarán. Sin embargo, esto requeriría tener una lista para cada distribución de teclado que uno elegiría dar soporte.

El parámetro "isrepeat", se refiere a "repetir", y si su valor es falso entonces el código que escribamos dentro la función keypressed() solo se ejecutara una vez sin importar cuanto tiempo se tenga la tecla presionada, y para volverlo a activar tendría que soltarse la tecla y volverla a presionar, mientras que si isrepeat es verdadero entonces dependiendo de la configuración de repetición del teclado, la función se ejecutara de acuerdo a esa velocidad. Para ajustar el valor de isrepeat usamos la función love.keyboard.setKeyRepeat(valor) el valor seria true o false.

Ahora la función keyreleased(key, scancode) nos permite verificar la tecla que haya sido liberada, es decir si teníamos una tecla presionada y la soltamos, la función la registrará y podremos saber que tecla se soltó y escribir el código que necesitemos.

Veamos un ejemplo:

function love.load()

    cx = 100
    cy = 100
    love.keyboard.setKeyRepeat(fase)

end

function love.keypressed(key)

    if  key == "up" then
        cy = cy - 1
    end
    if key == "down" then
        cy = cy  + 1
    end
    if key == "left" then
        cx = cx - 1
    end
    if key == "right" then
        cx = cx + 1
    end

end

function love.keyreleased(key,scancode) 

end

function love.update(dt)

end

function love.draw() 

    love.graphics.rectangle("fill",cx,cy,20,20)

end

Si pruebas este ejemplo notaras que al presionar las teclas direccionales el cuadrado se moverá un píxel, y si dejas presionada la tecla no pasa nada más, tienes que presionar continuamente la misma tecla para que avance más. Ahora si modificamos la variable isrepeat haciendo lo siguiente.

love.keyboard.setKeyRepeat(true) 

Podemos ver que si dejamos presionada alguna de las teclas direccionales el cuadrado se moverá a una velocidad constante que depende de la configuración del teclado en tu sistema.

Ahora agreguemos el siguiente código dentro de la función keyreleased() y volvemos a ajustar el valor de isrepeat a verdadero, love.keyboard.setKeyRepeat(true).

function love.keyreleased(key,scancode)

    if key == "up" or "down" or "left" or "right" then
        cx = 100
        cy = 100
    end

end

Y en este ejemplo observamos que tan pronto soltamos alguna de las teclas direccionales el cuadrado vuelve a su posición inicial.

Si intentaste presionar más de una tecla a la vez habrás notado que no es posible, la última tecla es la que se toma en cuenta, por lo tanto este método no nos sirve para mover al jugador con la velocidad y control que deseamos, para eso existe otra función que veremos ahora.

Dentro del módulo love.keyboard existe la función isDown(key), con esta función podemos verificar que tecla está presionada continuamente, por lo tanto podemos usarla dentro de la función update(). "key" al igual que en la función keypressed() es un parámetro de tipo texto, y será el nombre de la tecla que queremos verificar si está presionada. En este caso es posible verificar más de una tecla a la vez.

Ejemplo:

function love.load()

    cx = 0
    cy = 0
    sx = 20
    sy = 20

end

function love.update(dt)

    if love.keyboard.isDown("up") the
        cy = cy - sy*dt
    end
    if love.keyboard.isDown("down") then
        cy = cy + sy*dt
    end
    if love.keyboard.isDown("left") then
        cx = cx - sx*dt
    end
    if love.keyboard.isDown("right") then
        cx = cx + sx*dt
     end

end

function love.draw()

    love.graphics.rectangle("fill",cx,cy,20,20)

end

Ahora si podemos mover el cuadrado más fluido y continuamente con la velocidad que deseemos, y en dos direcciones a la vez. 

Para conocer los nombres de las teclas para ser usadas en tu código, puedes visitar este enlace a la página de Love2D. Es todo por ahora, hasta la próxima.


Cómo usar el ratón con Love2D

Comentarios

  1. saludos! Como puedo hacer un textbox para ingresar un numero en mostrarlo en la ventana de love2d ? es para yo poder crear programas de ingeniera.

    ResponderEliminar
    Respuestas
    1. Hola un saludo, muchas gracias por tu comentario. te dejo un enlace muy útil dónde podrás encontrar varias librerías para Love2D que te permitirán agregar componentes de ese tipo, espero puedas conseguir lo que necesitas. https://github.com/love2d-community/awesome-love2d

      Eliminar

Publicar un comentario