最简物理引擎用海龟渲染小球示例

pymunk是为python设计的一个2D物理引擎。一个物理实体是有质量,摩擦力等性质。要模拟物理世界,就要在这个世界中新建很多对象。
通过pymunk.Body能新建这个对象,我们把它叫body。body有坐标,旋转角度等。一旦body进物理学世界,物理引擎就会实时地计算出它的速度,旋转角度等等。但body是没有形状的,如果“碰”到了其它body,如何进行碰撞检测方面的计算呢?所以body要有一个形状,可能是100X100的正方形,或一个圆形。这样才能有进行碰撞检测必要条件。到这里如果新建了很多body并赋予了外形,它们就能遵循物理定律移动碰撞了,但我们却看不见它们。因为它们没有被渲染出来,也就是没有可视化的界面来让我们来看到。在下面的代码中我们用的是海龟画图的海龟对象来显示poly。具体方法请见以下代码:

"""最简物理引擎用海龟渲染小球示例.py"""


import pymunk               # 导入pymunk
import turtle

space = pymunk.Space()      # 创建物理空间
space.gravity = 0,-1        # 设置加速度

body = pymunk.Body(1,1666)  # 新建有质量和惯性的刚体
body.position = 0,200       # 设置刚体的坐标

poly = pymunk.Poly.create_box(body) # 创建刚体的多边形,相当于刚体的骨架
space.add(body, poly)       # 增加刚体和多边形到重力空间


# 下面用海龟画图来做上面的poly的界面
ball = turtle.Turtle(shape='circle')
ball.color("magenta")
ball.screen.delay(0)
ball.penup()

while True:                 # 无限循环
    space.step(0.02)        # 物理空间
    ball.goto(body.position)# 把球的坐标移到body的坐标

在while True循环中,space.step不断地计算body的坐标,而ball.goto则让ball不断地移到这个body的坐标,于是我们就能看到一个小球自由落体了。