Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/data/graphics/physics
blob: 0611351cf1ab38756e90a1405513105fc42c4853 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# physics

import pippy, pygame, sys, math
from pygame.locals import *
from pippy import physics

# initialize pygame first thing
pygame.init()
screen = pygame.display.set_mode()

# set up the physics world (instance of Elements)
world = physics.Elements(screen.get_size())
world.renderer.set_surface(screen)

# set up initial physics objects
world.add.ground()
world.add.ball((600,0), 50)
world.add.rect((500,0), 25, 300, dynamic=True, density=1.0, restitution=0.16, friction=0.5)

# add 20 more balls
balls = 0
while(balls < 20):
    world.add.ball((balls*5+200, balls*5), 50)
    balls += 1

# begin physics simulation
world.run_physics = True

while pippy.pygame.next_frame() and world.run_physics:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()

        elif event.type == KEYDOWN:
            sys.exit()

        elif event.type == MOUSEBUTTONDOWN and event.button == 1:
            bodylist = world.get_bodies_at_pos(event.pos, include_static=False)
            if bodylist and len(bodylist) > 0:
                world.add.mouseJoint(bodylist[0], event.pos)

        elif event.type == MOUSEBUTTONUP and event.button == 1:
            world.add.remove_mouseJoint()

        elif event.type == MOUSEMOTION and event.buttons[0]:
            world.mouse_move(event.pos)

    # clear display with a color
    # (red, green, blue), where 0 <= value < 256
    screen.fill((80, 160, 240))

    # update & draw physics world
    world.update()
    world.draw()

    # update the display
    pygame.display.flip()