Python Arcade: manejo de la entrada del teclado

En este artículo, discutiremos cómo manejar las entradas del teclado en el módulo arcade de Python.

En Arcade, puede verificar fácilmente qué botón del teclado está presionado y realizar tareas de acuerdo con eso. 

Para ello, vamos a utilizar estas funciones:

  • on_key_press()
  • on_key_release()

Sintaxis:

  • on_key_press(símbolo,modificadores)
  • on_key_release (símbolo, modificadores)

Parámetros:

  • símbolo: Tecla que fue golpeada
  • modificadores: Bitwise ‘y’ de todos los modificadores (shift, ctrl, num lock) presionados durante este evento.

Se llamará a la función on_key_press() cada vez que el usuario presione un botón del teclado. De manera similar, se llamará a on_key_released() cada vez que un usuario suelte un botón del teclado.

Ejemplo 1:

En este ejemplo, crearemos un programa simple utilizando el módulo arcade que verificará si la tecla de flecha superior está presionada o no.

Luego crearemos tres funciones dentro de esta clase.

  • on_draw(): Dentro de esta función, iniciaremos el renderizado usando arcade.start_render().
  • on_key_press(): esta función se llamará cada vez que se presione una tecla del teclado. Dentro de esta función, verificaremos si la tecla presionada es la tecla de flecha hacia arriba y luego imprimiremos «se presiona la tecla de flecha superior».
  • on_key_release(): esta función se llamará cada vez que se suelte una tecla del teclado. Dentro de esta función, verificaremos si la tecla liberada es la tecla de flecha hacia arriba y luego imprimiremos «la tecla de flecha superior está liberada».

A continuación se muestra la implementación:

Python3

# Importing arcade module
import arcade
  
# Creating MainGame class       
class MainGame(arcade.Window):
    def __init__(self):
        super().__init__(600, 600, title="Keyboard Inputs")
  
    # Creating on_draw() function to draw on the screen
    def on_draw(self):
        arcade.start_render()
          
    # Creating function to check button is pressed
    # or not
    def on_key_press(self, symbol,modifier):
  
        # Checking the button pressed
        # is up arrow key or not
        if symbol == arcade.key.UP:
            print("Upper arrow key is pressed")
  
    # Creating function to check button is released
    # or not
    def on_key_release(self, symbol, modifier):
  
        # Checking the button pressed
        # is up arrow key or not
        if symbol == arcade.key.UP:
            print("Upper arrow key is released")
          
# Calling MainGame class       
MainGame()
arcade.run()

Producción:

Ejemplo 2:

En este ejemplo, movemos el reproductor de acuerdo con las entradas del teclado.

Para ello, vamos a crear una clase MainGame(). Dentro de esta clase primero, vamos a inicializar algunas variables para las coordenadas x e y del sprite del jugador y la velocidad x e y del jugador, luego crearemos 4 funciones dentro de esta clase.

  • on_draw(): Dentro de esta función, dibujaremos nuestro reproductor y comenzaremos el renderizado.
  • setup(): en esta función, inicializaremos nuestra cámara y el objeto de escena, luego cargaremos los sprites de nuestro reproductor y plataforma. Después de eso, llamaremos a la función PhysicsEnginePlatformer().
  • on_update(): en esta función, actualizaremos las coordenadas x e y del sprite del jugador agregando el valor de la variable vel_x y vel_y,
  • on_key_press(): En esta función cambiaremos el valor de las variables vel_x y vel_y según la tecla del teclado que se presione.
  • on_key_release(): En esta función cambiaremos el valor de las variables vel_x y vel_y según la tecla del teclado que se suelte.

A continuación se muestra la implementación:

Python3

# Importing arcade module
import arcade
  
# Creating MainGame class       
class MainGame(arcade.Window):
    def __init__(self):
        super().__init__(600, 600, title="Player Movement")
  
        # Initializing the initial x and y coordinated
        self.x = 250 
        self.y = 250
  
        # Initializing a variable to store
        # the velocity of the player
        self.vel_x = 0
        self.vel_y = 0
  
    # Creating on_draw() function to draw on the screen
    def on_draw(self):
        arcade.start_render()
  
        # Drawing the rectangle using
        # draw_rectangle_filled function
        arcade.draw_circle_filled(self.x, self.y,25,
                                     arcade.color.GREEN )
    # Creating on_update function to
    # update the x coordinate
    def on_update(self,delta_time):
        self.x += self.vel_x * delta_time
        self.y += self.vel_y * delta_time
  
          
    # Creating function to change the velocity
    # when button is pressed
    def on_key_press(self, symbol,modifier):
  
        # Checking the button pressed
        # and changing the value of velocity
        if symbol == arcade.key.UP:
            self.vel_y = 300
            print("Up arrow key is pressed")
        elif symbol == arcade.key.DOWN:
            self.vel_y = -300
            print("Down arrow key is pressed")
        elif symbol == arcade.key.LEFT:
            self.vel_x = -300
            print("Left arrow key is pressed")
        elif symbol == arcade.key.RIGHT:
            self.vel_x = 300
            print("Right arrow key is pressed")
  
    # Creating function to change the velocity
    # when button is released
    def on_key_release(self, symbol, modifier):
  
        # Checking the button released
        # and changing the value of velocity
        if symbol == arcade.key.UP:
            self.vel_y = 0
        elif symbol == arcade.key.DOWN:
            self.vel_y = 0
        elif symbol == arcade.key.LEFT:
            self.vel_x = 0
        elif symbol == arcade.key.RIGHT:
            self.vel_x = 0
          
# Calling MainGame class       
MainGame()
arcade.run()

Producción:

Publicación traducida automáticamente

Artículo escrito por imranalam21510 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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