Introduction to Pymunk: The Ultimate Python Physics Engine
Pymunk is a space-efficient and easy-to-use Python library designed for 2D physics simulations.
Based on the robust Chipmunk2D, Pymunk comes with a collection of APIs to simulate physical interactions.
Essential API Explanations with Code Snippets
1. Install Pymunk
import pymunk
2. Create a Space
import pymunk space = pymunk.Space() space.gravity = (0, -981) # Set gravity
3. Add Static and Dynamic Bodies
static_body = pymunk.Body(body_type=pymunk.Body.STATIC) static_body.position = (0, 0) dynamic_body = pymunk.Body(mass=1, moment=10) dynamic_body.position = (100, 100)
4. Create and Add Shapes
static_shape = pymunk.Segment(static_body, (50, 100), (350, 100), 5) static_shape.elasticity = 0.5 space.add(static_body, static_shape) circle_shape = pymunk.Circle(dynamic_body, 10) circle_shape.elasticity = 0.5 space.add(dynamic_body, circle_shape)
5. Handling Collisions
def collision_event(arbiter, space, data): print("Collision detected!") handler = space.add_collision_handler(1, 2) handler.post_solve = collision_event
6. Step Through the Simulation
steps = 100 for _ in range(steps): space.step(0.02) # Advance the simulation by 0.02 seconds.
7. Example: Simple Pymunk App
import pygame import pymunk import pymunk.pygame_util pygame.init() screen = pygame.display.set_mode((600, 600)) clock = pygame.time.Clock() draw_options = pymunk.pygame_util.DrawOptions(screen) space = pymunk.Space() space.gravity = (0, -981) def create_ball(space, pos): body = pymunk.Body(1, 100, body_type=pymunk.Body.DYNAMIC) body.position = pos shape = pymunk.Circle(body, 10) space.add(body, shape) create_ball(space, (300, 300)) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False space.step(1/50.0) screen.fill((255, 255, 255)) space.debug_draw(draw_options) pygame.display.update() clock.tick(50) pygame.quit()
Pymunk is highly versatile for any 2D game or simulation project. With Pymunk, developers can create complex scenes and model realistic physical interactions effortlessly.
Hash: 91bec8fa2fae0c01a53f6c744848c4304b46a3a74f13d12887311ec9de37600d