def create_arrow(): vs = [(-30, 0), (0, 3), (10, 0), (0, -3)] mass = 1 moment = pymunk.moment_for_poly(mass, vs) arrow_body = pymunk.Body(mass, moment) arrow_shape = pymunk.Poly(arrow_body, vs) arrow_shape.friction = .5 arrow_shape.collision_type = 1 return arrow_body, arrow_shape
def spawn_logo(dt): x = random.randint(20, 400) y = 500 angle = random.random() * math.pi vs = [(-23, 26), (23, 26), (0, -26)] mass = 10 moment = pymunk.moment_for_poly(mass, vs) body = pymunk.Body(mass, moment) shape = pymunk.Poly(body, vs) shape.friction = 0.5 body.position = x, y body.angle = angle space.add(body, shape) sprite = pyglet.sprite.Sprite(logo_img, batch=batch) sprite.shape = shape sprite.body = body logos.append(sprite)
def spawn_logo(dt): x = random.randint(20,400) y = 500 angle = random.random() * math.pi vs = [(-23,26), (23,26), (0,-26)] mass = 10 moment = pymunk.moment_for_poly(mass, vs) body = pymunk.Body(mass, moment) shape = pymunk.Poly(body, vs) shape.friction = 0.5 body.position = x, y body.angle = angle space.add(body, shape) sprite = pyglet.sprite.Sprite(logo_img, batch=batch) sprite.shape = shape sprite.body = body logos.append(sprite)
def __init__(self): self.running = True self.drawing = True self.w, self.h = 600, 600 self.screen = pygame.display.set_mode((self.w, self.h)) self.clock = pygame.time.Clock() ### Init pymunk and create space self.space = pymunk.Space() self.space.gravity = (0.0, -900.0) ### ground body = pymunk.Body() shape = pymunk.Segment(body, (50, 100), (550, 100), .0) shape.friction = 1.0 self.space.add(shape) ### pyramid x = Vec2d(-100, 7.5) + (300, 100) y = Vec2d(0, 0) deltaX = Vec2d(0.5625, 2.0) * 10 deltaY = Vec2d(1.125, 0.0) * 10 for i in range(25): y = Vec2d(x) for j in range(i, 25): size = 5 points = [(-size, -size), (-size, size), (size, size), (size, -size)] mass = 1.0 moment = pymunk.moment_for_poly(mass, points, (0, 0)) body = pymunk.Body(mass, moment) body.position = y shape = pymunk.Poly(body, points, (0, 0)) shape.friction = 1 self.space.add(body, shape) y += deltaY x += deltaX
def __init__(self): self.running = True self.drawing = True self.w, self.h = 600,600 self.screen = pygame.display.set_mode((self.w, self.h)) self.clock = pygame.time.Clock() ### Init pymunk and create space self.space = pymunk.Space() self.space.gravity = (0.0, -900.0) ### ground body = pymunk.Body() shape = pymunk.Segment(body, (50, 100), (550,100), .0) shape.friction = 1.0 self.space.add(shape) ### pyramid x=Vec2d(-100, 7.5) + (300,100) y=Vec2d(0,0) deltaX=Vec2d(0.5625, 2.0)*10 deltaY=Vec2d(1.125, 0.0)*10 for i in range(25): y = Vec2d(x) for j in range(i, 25): size= 5 points = [(-size, -size), (-size, size), (size,size), (size, -size)] mass = 1.0 moment = pymunk.moment_for_poly(mass, points, (0,0)) body = pymunk.Body(mass, moment) body.position = y shape = pymunk.Poly(body, points, (0,0)) shape.friction = 1 self.space.add(body,shape) y += deltaY x += deltaX
def main(): pygame.init() screen = pygame.display.set_mode((600, 600)) clock = pygame.time.Clock() running = True ### Physics stuff space = pymunk.Space() space.gravity = Vec2d(0.0, -900.0) ## logo logo_img = pygame.image.load("pymunk_logo_googlecode.png") logos = [] ### Static line static_body = pymunk.Body() static_lines = [ pymunk.Segment(static_body, (11.0, 280.0), (407.0, 246.0), 0.0), pymunk.Segment(static_body, (407.0, 246.0), (407.0, 343.0), 0.0) ] for l in static_lines: l.friction = 0.5 space.add(static_lines) ticks_to_next_spawn = 10 while running: for event in pygame.event.get(): if event.type == QUIT: running = False elif event.type == KEYDOWN and event.key == K_ESCAPE: running = False elif event.type == KEYDOWN and event.key == K_p: pygame.image.save(screen, "using_sprites.png") ticks_to_next_spawn -= 1 if ticks_to_next_spawn <= 0: ticks_to_next_spawn = 100 x = random.randint(20, 400) y = 500 angle = random.random() * math.pi vs = [(-23, 26), (23, 26), (0, -26)] mass = 10 moment = pymunk.moment_for_poly(mass, vs) body = pymunk.Body(mass, moment) shape = pymunk.Poly(body, vs) shape.friction = 0.5 body.position = x, y body.angle = angle space.add(body, shape) logos.append(shape) ### Update physics dt = 1.0 / 60.0 for x in range(1): space.step(dt) ### Draw stuff screen.fill(THECOLORS["black"]) for logo_shape in logos: # image draw p = logo_shape.body.position p = Vec2d(p.x, flipy(p.y)) # we need to rotate 180 degrees because of the y coordinate flip angle_degrees = math.degrees(logo_shape.body.angle) + 180 rotated_logo_img = pygame.transform.rotate(logo_img, angle_degrees) offset = Vec2d(rotated_logo_img.get_size()) / 2. p = p - offset screen.blit(rotated_logo_img, (p.x, p.y)) # debug draw ps = logo_shape.get_vertices() ps = [(p.x, flipy(p.y)) for p in ps] ps += [ps[0]] pygame.draw.lines(screen, THECOLORS["red"], False, ps, 1) for line in static_lines: body = line.body pv1 = body.position + line.a.rotated(body.angle) pv2 = body.position + line.b.rotated(body.angle) p1 = pv1.x, flipy(pv1.y) p2 = pv2.x, flipy(pv2.y) pygame.draw.lines(screen, THECOLORS["lightgray"], False, [p1, p2], 2) ### Flip screen pygame.display.flip() clock.tick(50) pygame.display.set_caption("fps: " + str(clock.get_fps()))
def main(): pygame.init() screen = pygame.display.set_mode((600, 600)) clock = pygame.time.Clock() running = True ### Physics stuff space = pymunk.Space() space.gravity = Vec2d(0.0, -900.0) ## logo logo_img = pygame.image.load("pymunk_logo_googlecode.png") logos = [] ### Static line static_body = pymunk.Body() static_lines = [pymunk.Segment(static_body, (11.0, 280.0), (407.0, 246.0), 0.0) ,pymunk.Segment(static_body, (407.0, 246.0), (407.0, 343.0), 0.0) ] for l in static_lines: l.friction = 0.5 space.add(static_lines) ticks_to_next_spawn = 10 while running: for event in pygame.event.get(): if event.type == QUIT: running = False elif event.type == KEYDOWN and event.key == K_ESCAPE: running = False elif event.type == KEYDOWN and event.key == K_p: pygame.image.save(screen, "using_sprites.png") ticks_to_next_spawn -= 1 if ticks_to_next_spawn <= 0: ticks_to_next_spawn = 100 x = random.randint(20,400) y = 500 angle = random.random() * math.pi vs = [(-23,26), (23,26), (0,-26)] mass = 10 moment = pymunk.moment_for_poly(mass, vs) body = pymunk.Body(mass, moment) shape = pymunk.Poly(body, vs) shape.friction = 0.5 body.position = x, y body.angle = angle space.add(body, shape) logos.append(shape) ### Update physics dt = 1.0/60.0 for x in range(1): space.step(dt) ### Draw stuff screen.fill(THECOLORS["black"]) for logo_shape in logos: # image draw p = logo_shape.body.position p = Vec2d(p.x, flipy(p.y)) # we need to rotate 180 degrees because of the y coordinate flip angle_degrees = math.degrees(logo_shape.body.angle) + 180 rotated_logo_img = pygame.transform.rotate(logo_img, angle_degrees) offset = Vec2d(rotated_logo_img.get_size()) / 2. p = p - offset screen.blit(rotated_logo_img, (p.x,p.y)) # debug draw ps = logo_shape.get_vertices() ps = [(p.x, flipy(p.y)) for p in ps] ps += [ps[0]] pygame.draw.lines(screen, THECOLORS["red"], False, ps, 1) for line in static_lines: body = line.body pv1 = body.position + line.a.rotated(body.angle) pv2 = body.position + line.b.rotated(body.angle) p1 = pv1.x, flipy(pv1.y) p2 = pv2.x, flipy(pv2.y) pygame.draw.lines(screen, THECOLORS["lightgray"], False, [p1,p2], 2) ### Flip screen pygame.display.flip() clock.tick(50) pygame.display.set_caption("fps: " + str(clock.get_fps()))