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: