Python Arcade - Adicionando Câmera
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.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva