Neste artigo, aprenderemos como podemos adicionar câmeras a jogos de arcade em Python.

Adicionando Câmera

Você pode criar uma câmera no fliperama usando a função Câmera().

Sintaxe: arcade.Camera (largura. Altura) 

Parâmetros:

  • largura: largura da câmera
  • altura: altura da câmera

Então, para usar essa câmera, vamos criar uma nova variável.

self.camera = None

Então, em nossa função setup(), criaremos nossa câmera usando a função Camera().

self.camera= arcade.Camera(200,200)

Depois disso, usaremos a função camera.use em nossa função on_draw() para usar a câmera.

self.camera.use()

No exemplo abaixo, vamos criar a classe MainGame(). Dentro de nossa classe MainGame(), primeiro inicializaremos algumas variáveis ​​para velocidade, câmera, cena, sprite do jogador e mecanismo de física, depois disso, criaremos 5 funções:

  • on_draw(): Dentro desta função, iniciaremos a renderização usando arcade.start_render() e então desenharemos nossa cena.
  • setup(): Dentro desta função, chamaremos as funções arcade.Scene() e arcade.Camera() e então carregaremos e armazenaremos nossos sprites em uma lista de sprites.
  • on_update(): Aqui vamos atualizar a coordenada x do nosso sprite do jogador e nosso motor de física.
  • on_key_press(): Dentro desta função, verificaremos qual botão do teclado está pressionado e alteraremos o valor da variável de velocidade de acordo com isso.
  • on_key_release(): Dentro desta função, verificaremos qual botão do teclado foi liberado e alteraremos o valor da variável de velocidade de acordo com isso.

Sprites usados:

Abaixo está a implementação:

# 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 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()
        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(200, 200)
  
        # 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 platform sprite
        platform = arcade.Sprite("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()
  
    # 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
  
    # 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
  
  
# Calling MainGame class
game = MainGame()
game.setup()
arcade.run()

Saída:

Mas aqui você pode ver que nossa câmera não está se movendo com o nosso player. Então, para mover a câmera com nosso player, temos que criar uma função.

Movendo a câmera

Agora vamos criar uma nova função camera_move() para mover nossa câmera com nosso player. Então, chamaremos esta função em nossa função on_update().

camera_move():  Dentro desta função, iremos calcular as coordenadas xey do centro da câmera de acordo com a posição do nosso jogador. Em seguida, moveremos nossa câmera com a ajuda da função move_to().

Abaixo está a implementação:

# 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 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(200,200)
  
        # 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 platform sprite
        platform = arcade.Sprite("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()
  
        # 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
  
    # 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()

Saída:

 Atenção geek! Fortaleça suas bases com o Python Programming Foundation Course e aprenda o básico.