Python Arcade - Collision Detection - GeeksforGeeks

05 Oct, 2021
In this article, we will learn How we can add collisions in arcade games in Python.
You can install the Arcade module using the below command:
pip install arcade
In this example, we are going to use the check_for_collision() function to add collision between 2 sprites.
Syntax: arcade.check_for_collision( sprite1, sprite2)
Parameters:
sprite1:- First sprite
sprite2:- Second sprite
Returns: Boolean value
Below is the implementation:
Python3
# Importing arcade moduleimport arcade # Creating MainGame classclass MainGame(arcade.Window):    def __init__(self):        super().__init__(600, 600, title="Player Movement")         # Initializing a variable to store        # the velocity of Player1 and Player2        self.vel_x1 = 380        self.vel_x2 = 380         self.scene = None         # Creating variable to store player sprite        self.player1 = None         # Creating variable to store player sprite        self.player2 = None     # Creating on_draw() function to draw on the screen    def on_draw(self):        arcade.start_render()         # Drawing the scene        self.scene.draw()     def setup(self):         # Creating scene        self.scene = arcade.Scene()         # Adding player sprite        self.player_sprite1 = arcade.Sprite("Player.png", 1)        self.player_sprite2 = arcade.Sprite("Player2.png", 1)         # Adding coordinates for the center of the sprite        self.player_sprite1.center_x = 20        self.player_sprite1.center_y = 300         # Adding coordinates for the center of the sprite        self.player_sprite2.center_x = 580        self.player_sprite2.center_y = 300         # Adding sprites in scene        self.scene.add_sprite('Player', self.player_sprite1)        self.scene.add_sprite('Player', self.player_sprite2)     # Creating on_update function to    # update the x coordinate    def on_update(self, delta_time):         # Changing x coordinate of players        self.player_sprite1.center_x += self.vel_x1 * delta_time        self.player_sprite2.center_x -= self.vel_x2 * delta_time         # Checking if sprites are colliding or not        colliding = arcade.check_for_collision(            self.player_sprite1, self.player_sprite2)         # If sprites are colliding then changing direction        if colliding:            self.vel_x1 *= -1            self.vel_x2 *= -1         # Changing the direction if sprites crosses the screen boundary        if self.player_sprite1.center_x > 600 or self.player_sprite1.center_x < 0:            self.vel_x1 *= -1         if self.player_sprite2.center_x > 600 or self.player_sprite2.center_x < 0:            self.vel_x2 *= -1  # Calling MainGame classgame = MainGame()game.setup()arcade.run()
Output:
In this example, we are going to use PhysicsEnginePlatformer() function to add collision between our player and platform.
Syntax: arcade.PhysicsEnginePlatformer(player_sprite, platforms,, gravity, ladders)
Parameters:
player_sprite:- The player sprite
platforms:- The platform sprite list
gravity:- Amount of gravity
ladders:- Ladders the user can climb on
Below is the implementation:
Python3
# Importing arcade moduleimport arcade # Creating MainGame classclass 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 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 our scene        self.scene.draw()     def setup(self):               # Initialize Scene object        self.scene = arcade.Scene()         # 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 classgame = MainGame()game.setup()arcade.run()
Output:
varshagumber28
Python-Arcade
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to Install PIP on Windows ?
How to drop one or multiple columns in Pandas Dataframe
How To Convert Python Dictionary To JSON?
Check if element exists in list in Python
Python | Pandas dataframe.groupby()
Python | Get unique values from a list
Defaultdict in Python
Python | os.path.join() method
Python Classes and Objects
Create a directory in Python