En este artículo, aprenderemos cómo podemos agregar cámaras a los juegos de arcade en Python.
Agregar cámara
Puedes crear una cámara en arcade usando la función Camera().
Sintaxis: arcade.Camera( ancho. alto)
Parámetros:
- ancho: ancho de la cámara
- altura: Altura de la cámara
Entonces, para usar esta cámara, vamos a crear una nueva variable.
self.camera = None
Luego, en nuestra función setup(), crearemos nuestra cámara usando la función Camera().
self.camera= arcade.Camera(200,200)
Después de eso, usaremos la función camera.use en nuestra función on_draw() para usar la cámara.
self.camera.use()
En el siguiente ejemplo, vamos a crear la clase MainGame(). Dentro de nuestra clase MainGame() primero inicializaremos algunas variables para velocidad, cámara, escena, sprite del jugador y motor de física, luego crearemos 5 funciones:
- on_draw(): dentro de esta función, comenzaremos el renderizado usando arcade.start_render() y luego dibujaremos nuestra escena.
- setup(): dentro de esta función, llamaremos a las funciones arcade.Scene() y arcade.Camera() y luego cargaremos y almacenaremos nuestros sprites en una lista de sprites.
- on_update(): Aquí actualizaremos la coordenada x de nuestro sprite de jugador y nuestro motor de física.
- on_key_press(): Dentro de esta función, verificaremos qué botón del teclado se presiona y cambiaremos el valor de la variable de velocidad de acuerdo con eso.
- on_key_release(): Dentro de esta función, comprobaremos qué botón del teclado se suelta y cambiaremos el valor de la variable de velocidad de acuerdo con eso.
Sprites usados:
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 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()
Producción:
Pero aquí puede ver que nuestra cámara no se mueve con nuestro reproductor. Entonces, para mover la cámara con nuestro reproductor, debemos crear una función.
Mover la cámara
Ahora vamos a crear una nueva función camera_move() para mover nuestra cámara con nuestro reproductor. Luego llamaremos a esta función en nuestra función on_update().
camera_move(): Dentro de esta función, calcularemos las coordenadas x e y del centro de la cámara según la posición de nuestro jugador. Luego moveremos nuestra cámara con la ayuda de la función move_to().
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 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()
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