pymunk_demo_platformer_11.py Diff¶

pymunk_demo_platformer_11.py
```--- C:\Users\craven\Desktop\WebServer\arcade\doc\tutorials\pymunk_platformer\pymunk_demo_platformer_10.py
@@ -183,6 +183,7 @@

# Track the current state of what key is pressed
self.left_pressed: bool = False
@@ -219,6 +220,11 @@
self.player_sprite.center_y = SPRITE_SIZE * grid_y + SPRITE_SIZE / 2
# Add to player sprite list
self.player_list.append(self.player_sprite)
+
+        # Moving Sprite
+                                                                'Moving Platforms',
+                                                                SPRITE_SCALING_TILES)

# --- Pymunk Physics Engine Setup ---

@@ -284,6 +290,10 @@
friction=DYNAMIC_ITEM_FRICTION,
collision_type="item")
+

def on_key_press(self, key, modifiers):
"""Called whenever a key is pressed. """
@@ -391,10 +401,37 @@
# Move items in the physics engine
self.physics_engine.step()

+        # For each moving sprite, see if we've reached a boundary and need to
+        # reverse course.
+        for moving_sprite in self.moving_sprites_list:
+            if moving_sprite.boundary_right and \
+                    moving_sprite.change_x > 0 and \
+                    moving_sprite.right > moving_sprite.boundary_right:
+                moving_sprite.change_x *= -1
+            elif moving_sprite.boundary_left and \
+                    moving_sprite.change_x < 0 and \
+                    moving_sprite.left > moving_sprite.boundary_left:
+                moving_sprite.change_x *= -1
+            if moving_sprite.boundary_top and \
+                    moving_sprite.change_y > 0 and \
+                    moving_sprite.top > moving_sprite.boundary_top:
+                moving_sprite.change_y *= -1
+            elif moving_sprite.boundary_bottom and \
+                    moving_sprite.change_y < 0 and \
+                    moving_sprite.bottom < moving_sprite.boundary_bottom:
+                moving_sprite.change_y *= -1
+
+            # Figure out and set our moving platform velocity.
+            # Pymunk uses velocity is in pixels per second. If we instead have
+            # pixels per frame, we need to convert.
+            velocity = (moving_sprite.change_x * 1 / delta_time, moving_sprite.change_y * 1 / delta_time)
+            self.physics_engine.set_velocity(moving_sprite, velocity)
+
def on_draw(self):
""" Draw everything """