我真的很喜欢pymunk物理库,花栗鼠物理库的包装。
首先,图书馆需要进行初始化:
import pymunk
pymunk.init_pymunk()
space = pymunk.Space()
space.gravity = (0.0, -100.0)
实现的东西,你已经要求你必须创建一个Body
和Circle
形状要创建每个粒子的喜欢。
mass = 1
radius = 14
inertia = pymunk.moment_for_circle(mass, 0, radius, (0,0))
body = pymunk.Body(mass, inertia)
x, y = random.randint(0, 200), random.randint(0, 200)
body.position = x, 550
shape = pymunk.Circle(body, radius, (0,0))
shape.sensor = True
space.add(body, shape)
的颗粒将不会互相碰撞,东阳的sensor
标志被设置为True
。半径现在有点影响力。
现在,我们创建了一个回调函数具有影响力的重叠区域的颗粒:
def near_callback(space, arbiter, *args, **kwargs):
body_i = arbiter.shapes[0].body
body_j = arbiter.shapes[1].body
# calculate the forces force_i and force_j with your formula
...
body_i.apply_force(force_i)
body_j.apply_force(force_j)
回调被设置在space
:
space.set_default_collision_handler(near_callback, near_callback, None, None, None)
当然,space
有对于每个时间帧“步进”:
space.step(dt)
我希望这有点可以理解和帮助。
如果你是一个初学者,我建议你自己写这个东西。这些图书馆可能会让初学者感到困惑。此外,你会学到东西。 – ktdrv 2011-04-19 18:20:22