Python Arcade – Kamera hinzufügen
In diesem Artikel erfahren wir, wie wir Kameras zu Arcade-Spielen in Python hinzufügen können.
Kamera hinzufügen
Sie können eine Kamera in Arcade mit der Funktion Camera() erstellen.
Syntax: arcade.Camera( Breite. Höhe)
Parameter:
- width: Breite der Kamera
- Höhe: Höhe der Kamera
Um diese Kamera zu verwenden, erstellen wir also eine neue Variable.
self.camera = None
Dann erstellen wir in unserer setup()-Funktion unsere Kamera mit der Camera()-Funktion.
self.camera= arcade.Camera(200,200)
Danach verwenden wir die Funktion camera.use in unserer Funktion on_draw(), um die Kamera zu verwenden.
self.camera.use()
Im folgenden Beispiel erstellen wir die Klasse MainGame(). In unserer Klasse MainGame() werden wir zuerst einige Variablen für Geschwindigkeit, Kamera, Szene, Sprite des Spielers und Physik-Engine initialisieren, danach werden wir 5 Funktionen erstellen:
- on_draw(): Innerhalb dieser Funktion starten wir das Rendern mit arcade.start_render() und zeichnen dann unsere Szene.
- setup(): Innerhalb dieser Funktion rufen wir die Funktionen arcade.Scene() und arcade.Camera() auf und laden und speichern dann unsere Sprites in einer Sprite-Liste.
- on_update(): Hier werden wir die x-Koordinate unseres Player-Sprites und unserer Physik-Engine aktualisieren.
- on_key_press(): Innerhalb dieser Funktion prüfen wir, welche Tastaturtaste gedrückt wird, und ändern den Wert der Velocity-Variablen entsprechend.
- on_key_release(): Innerhalb dieser Funktion prüfen wir, welche Tastaturtaste losgelassen wird, und ändern den Wert der Velocity-Variablen entsprechend.
Verwendete Sprites:
Nachfolgend die Umsetzung:
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()
Ausgabe:
Aber hier können Sie sehen, dass sich unsere Kamera nicht mit unserem Player bewegt. Um also die Kamera mit unserem Player zu bewegen, müssen wir eine Funktion erstellen.
Bewegen der Kamera
Jetzt werden wir eine neue Funktion camera_move() erstellen, um unsere Kamera mit unserem Player zu bewegen. Dann rufen wir diese Funktion in unserer Funktion on_update() auf.
camera_move(): Innerhalb dieser Funktion berechnen wir die x- und y-Koordinaten des Kamerazentrums entsprechend der Position unseres Spielers. Dann bewegen wir unsere Kamera mit Hilfe der Funktion move_to().
Nachfolgend die Umsetzung:
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()
Ausgabe: