En este artículo, aprenderemos cómo podemos agregar enemigos en arcade.
Agregar enemigos
Para agregar enemigos a nuestro juego vamos a seguir los siguientes pasos:
- Primero, crearemos una variable para almacenar el sprite enemigo.
Sintaxis:
self.enemy = None
- Después de eso, crearemos una variable más para almacenar la velocidad del enemigo.
Sintaxis:
self.enemy_move = velocity
- Guarda nuestro sprite enemigo en la variable enemigo.
Sintaxis:
self.enemy = arcade.Sprite("path",1)
- Establecer las coordenadas iniciales.
Sintaxis:
self.enemy.center_x = value self.enemy.center_y = value
- Agrega el sprite enemigo en la escena.
Sintaxis:
self.scene.add_sprite("Enemy", self.enemy)
- Mueve al enemigo cambiando la coordenada x.
Sintaxis:
self.enemy.center_x += self.enemy_move
- Comprueba si hay colisiones entre el jugador y el enemigo.
Sintaxis:
enemigo_colisión = arcade.check_for_collision_with_list(
self.player_sprite, self.scene.get_sprite_list(“Enemigo”)
)
- Si están chocando, elimine el sprite del jugador.
Sintaxis:
para el enemigo en enemigo_collide:
self.player_sprite.remove_from_sprite_lists()
Funciones utilizadas:
- draw_text(): esta función se usa para dibujar texto en la pantalla usando la etiqueta de Pyglet.
Sintaxis: arcade.draw_text(texto, x, y, color, tamaño, ancho, alineación, nombre_fuente)
Parámetros:
texto: Texto que queremos mostrar
x : coordenada x
y : coordenada y
color : color del texto
tamaño : Tamaño de la fuente
ancho : Ancho del texto
align : Alineación del texto
font_name : Nombre de la fuente
- Camera(): la clase Camera se usa para controlar la ventana gráfica visible.
Sintaxis: arcade.Camera(ancho, alto, ventana)
Parámetros:
ancho: ancho de la ventana gráfica
altura: altura de la ventana gráfica
ventana: Ventana para asociar con esta cámara
- Escena(): una clase que representa un objeto de escena.
Sintaxis: arcade.Scene(sprite_lists, name_mapping)
Parámetros:
sprite_lists: una lista de objetos SpriteList
name_mapping: un diccionario de objetos SpriteList
- PhysicsEnginePlatformer(): motor de física simplista, utilizado para la plataforma.
Sintaxis: arcade.PhysicsEnginePlatformer(player_sprite, plataformas, gravedad, escaleras)
Parámetros:
player_sprite: sprite del jugador
plataformas: los sprites por los que no puede moverse
gravedad: aceleración hacia abajo por cuadro
ladders: Escaleras en las que el usuario puede subir
Sprites usados:
En el siguiente ejemplo, vamos a crear una clase MainGame(). Dentro de esta clase primero, vamos a inicializar algunas variables para velocidad, cámara, puntaje, nivel, enemigo, sprite enemigo y sprite del jugador, luego crearemos 6 funciones dentro de esta clase.
- on_draw(): Dentro de esta función, usaremos nuestra cámara y dibujaremos la escena y el texto de nuestra partitura en la pantalla.
- setup(): en esta función, inicializaremos nuestra cámara y el objeto de escena, luego cargaremos los sprites de nuestro reproductor y plataforma, luego cargaremos nuestro sprite enemigo e inicializaremos las coordenadas x e y iniciales. Después de eso, llamaremos a la función PhysicsEnginePlatformer().
- on_update(): en esta función, actualizaremos las coordenadas x del sprite, la cámara y el motor de física del jugador. También agregaremos nuestra variable agent_move en las coordenadas x del sprite enemigo. Luego comprobaremos la colisión entre el enemigo y el jugador. Y si el jugador choca con el enemigo, eliminaremos el sprite del jugador.
- on_key_press() y on_key_release(): En esta función cambiaremos el valor de la variable velocidad según la tecla del teclado que se presione o se suelte.
- camera_move(): En esta función, moveremos nuestra cámara de acuerdo a la posición actual de nuestro jugador.
Ejemplo: Agregar enemigo
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 to store current score self.score = 0 # Creating variable to move the enemy self.enemy_move = 5 # Creating variable for enemy sprite self.enemy = 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() # Drawing the text arcade.draw_text('Score :- '+str(self.score), self.player_sprite.center_x - 500 / 2, self.player_sprite.center_y + 200, arcade.color.WHITE, 30, 5000, 'left') # 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) # Loading enemy sprite self.enemy = arcade.Sprite("Enemy.png", 1) # Initializing the starting coordinates self.enemy.center_x = 500 self.enemy.center_y = 110 # Adding the enemy sprite in the scene self.scene.add_sprite("Enemy", self.enemy) # 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 = 90 # Adding Sprite in our scene self.scene.add_sprite("Player", self.player_sprite) # 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): # Moving the position of enemy self.enemy.center_x += self.enemy_move # Changing the direction of enemy movement if self.enemy.center_x > 500 or self.enemy.center_x < 160: self.enemy_move *= -1 # Checking if the enemy is colliding with player or not enemy_collide = arcade.check_for_collision_with_list( self.player_sprite, self.scene.get_sprite_list("Enemy") ) # Looping through each enemy and removing the player # if colliding for enemy in enemy_collide: # Remove the coin self.player_sprite.remove_from_sprite_lists() # 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 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:
Matar al enemigo
Ahora queremos matar al enemigo cuando el jugador salte encima de él. Para ello, comprobaremos si el otro jugador inferior es igual al superior del enemigo o no. Si es igual, eliminaremos el sprite de capa.
- Para esto primero, almacenaremos la coordenada de la parte inferior del jugador en una variable.
Sintaxis:
x = int(self.player_sprite.center_y – 14)
- Del mismo modo la coordenada de la parte superior del enemigo en una variable diferente.
Sintaxis:
y = int(self.enemy.center_y + 25)
- Luego, si x e y son iguales y el enemigo y el jugador chocan, eliminaremos nuestro sprite enemigo.
Sintaxis:
si x == y:
self.enemy.remove_from_sprite_lists()
Ejemplo: Matar a un enemigo usando Arcade
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 to store current score self.score = 0 # Creating variable to move the enemy self.enemy_move = 2 # Creating variable for enemy sprite self.enemy = 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() # Drawing the text arcade.draw_text('Score :- '+str(self.score), self.player_sprite.center_x - 500 / 2, self.player_sprite.center_y + 200, arcade.color.WHITE, 30, 5000, 'left') # 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) # Loading enemy sprite self.enemy = arcade.Sprite("Enemy.png", 1) # Initializing the starting coordinates self.enemy.center_x = 500 self.enemy.center_y = 110 # Adding the enemy sprite in the scene self.scene.add_sprite("Enemy", self.enemy) # 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 = 90 # Adding Sprite in our scene self.scene.add_sprite("Player", self.player_sprite) # 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): # Moving the position of enemy self.enemy.center_x += self.enemy_move # Changing the direction of enemy movement if self.enemy.center_x > 500 or self.enemy.center_x < 160: self.enemy_move *= -1 # Checking if the enemy is colliding with player or not enemy_collide = arcade.check_for_collision_with_list( self.player_sprite, self.scene.get_sprite_list("Enemy") ) # Looping through each enemy and removing the player if colliding for enemy in enemy_collide: # Checking the top of enemy and bottom of player x = int(self.player_sprite.center_y - 14) y = int(self.enemy.center_y + 25) if x == y: self.enemy.remove_from_sprite_lists() else: # Remove the coin self.player_sprite.remove_from_sprite_lists() # 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 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