Python Arcade: agregar plataformas móviles

En este artículo, discutiremos cómo agregar plataformas móviles a nuestros juegos de arcade en Python.

Agregar plataforma móvil

Podemos agregar fácilmente plataformas móviles en nuestro juego de arcade siguiendo los pasos a continuación:

  • Crea 2 nuevas variables para el sprite y la velocidad de la plataforma en movimiento.
self.moving_vel = 3
self.moving_platform = None
  • Carga el sprite y agrega las coordenadas iniciales.
self.moving_platform = arcade.Sprite("Moving.png",1)
self.moving_platform.center_x = 500
self.moving_platform.center_y = 500
  • Actualice la coordenada y de la plataforma.
self.moving_platform.center_y -= self.moving_vel
  • Cambie la dirección de la plataforma si la plataforma cruza el límite.
if self.moving_platform.center_y < 100 or self.moving_platform.center_y>600:
   self.moving_vel *= -1

Sprites usados:

Para ello, vamos a crear una clase MainGame(). Dentro de esta clase primero, vamos a inicializar algunas variables para la velocidad del jugador, la velocidad de la plataforma, la cámara, el sprite del jugador, el motor de física y nuestra escena. Después de eso, crearemos 6 funciones dentro de esta clase.

  • on_draw(): Dentro de esta función, usaremos nuestra cámara y luego dibujaremos nuestra escena.
  • 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 la coordenada x del sprite del jugador agregando el valor de la variable de velocidad y también actualizaremos la coordenada y de nuestra plataforma móvil. Después de eso, llamaremos a nuestra función camera_move().
  • on_key_press(): En esta función cambiaremos el valor de la variable vel_x según la tecla del teclado que se presione.
  • on_key_release(): En esta función cambiaremos el valor de la variable vel_x según la tecla del teclado que se suelte.
  • camera_move(): En esta función, cambiaremos la posición de la cámara según la posición actual del jugador.

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 a variable to store
        # the velocity of the player
        self.vel_x = 0
  
        # Creating variable for Camera
        self.camera = None
  
        # Creating variable for moving velocity
        self.moving_vel = 3
  
        # Creating variable for Platform
        self.moving_platform = None
          
        # Creating scene object
        self.scene = None
  
        # Creating variable to store player sprite
        self.player = None
  
        # Creating variable for our game engine
        self.physics_engine = None
  
    # Creating on_draw() function to draw on the screen
    def on_draw(self):
        arcade.start_render()
  
        # Using the camera
        self.camera.use()
          
        # Drawing our scene
        self.scene.draw()
  
    def setup(self):
         # Initialize Scene object
        self.scene = arcade.Scene()
          
        # Using Camera() function
        self.camera= arcade.Camera(600,600)
  
        # Creating different sprite lists
        self.scene.add_sprite_list("Player")
        self.scene.add_sprite_list("Platforms", use_spatial_hash=True)
  
        # Adding player sprite
        self.player_sprite = arcade.Sprite("Player.png", 1)
  
        # Adding coordinates for the center of the sprite
        self.player_sprite.center_x = 64
        self.player_sprite.center_y = 600
  
        #Adding Sprite in our scene
        self.scene.add_sprite("Player", self.player_sprite)
  
        #Adding moving Platform sprite
        self.moving_platform = arcade.Sprite("Moving.png",1)
  
        # Adding starting coordinates
        self.moving_platform.center_x = 500
        self.moving_platform.center_y = 500
  
        # Adding to Platforms sprite group 
        self.scene.add_sprite("Platforms",  self.moving_platform)
  
        # Adding platform sprite according to level
        platform = arcade.Sprite(f"Platform.png", 1)
          
        # Adding coordinates for the center of the platform
        platform.center_x = 300
        platform.center_y = 32
        self.scene.add_sprite("Platforms", platform)
  
        # Creating Physics engine
        self.physics_engine = arcade.PhysicsEnginePlatformer(
            self.player_sprite,
          self.scene.get_sprite_list("Platforms"),
          0.5
        )
  
  
    # Creating on_update function to
    # update the x coordinate
    def on_update(self,delta_time):
  
        # Changing x coordinate of player
        self.player_sprite.center_x += self.vel_x * delta_time
          
        # Updating the physics engine to move the player
        self.physics_engine.update()
  
        # Adding moving velocity in moving platform
        self.moving_platform.center_y -= self.moving_vel
  
        # Changing the direction 
        if self.moving_platform.center_y < 100 or
        self.moving_platform.center_y>600:
            self.moving_vel *= -1
  
        # Calling the camera_move function
        self.camera_move()
  
    # 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.LEFT:
            self.vel_x = -300
        elif symbol == arcade.key.RIGHT:
            self.vel_x = 300
        elif symbol == arcade.key.UP:
            if self.physics_engine.can_jump():
                self.player_sprite.change_y = 15
  
    # 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.LEFT:
            self.vel_x = 0
        elif symbol == arcade.key.RIGHT:
            self.vel_x = 0
  
    def camera_move(self):
        # Getting the x coordinate for the center of camera
        screen_x = self.player_sprite.center_x -
        (self.camera.viewport_width / 2)
          
        # Getting the y coordinate for the center of camera
        screen_y = self.player_sprite.center_y -
        (self.camera.viewport_height / 2)
          
        # Moving the camera
        self.camera.move_to([screen_x, screen_y])
          
# Calling MainGame class       
game = MainGame()
game.setup()
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 *