我正在使用pymunk模拟人体运动。因为我希望身体以某种方式移动,所以我在每个时间点都设置它们的位置(我知道不建议对Chipmunk / Pymunk建议这样做)。这样做为我的单个物体移动提供了良好的结果,但是问题是,当我这样做时,这些物体似乎不再能够检测到碰撞,它们只是彼此通过而不是碰撞。我尝试使时间步长变短,但这似乎无济于事。有人对我如何解决这个问题有任何提示,或者鉴于我在每个时间点都在设置位置,这是不可避免的吗?
谢谢。
编辑以显示示例代码:
所以我每次设置位置和角度的方式都是这样:
body.position = (body.position[0] + speed*cos(body.angle)*dt + (random term), \
body.position[1] + speed*sin(body.angle)*dt + (random term))
body.angle = body.angle + body.angular_velocity*dt + (random term)
我希望能够做到这一点,因为我有矩形主体,并且此代码允许矩形沿其长轴移动,并且仅对一个主体有效,但是当我有多个主体时,我也希望碰撞能够起作用似乎使它们根本无法工作(或者,如果它们正在工作,则它们工作得很差)。
答案 0 :(得分:0)
因此,如果您设置物体的位置,则该物体将立即移动到该位置,就像您将其传送到那里一样。如果已经有其他对象,则应在接下来的两个时间步中将其推开。 您还将能够获取碰撞数据,例如通过使用碰撞回调,例如本示例中的
import pymunk
s = p.Space()
b1 = p.Body(1, 1)
c1 = p.Circle(b1, 10)
b2 = p.Body(1, 1)
c2 = p.Circle(b2, 10)
s.add(b1, c1, b2, c2)
self.hits = 0
def begin(space, arb, data):
self.hits += h.data["test"]
return True
h = s.add_collision_handler(0, 0)
h.data["test"] = 1
h.begin = begin
for x in range(10):
s.step(0.1)
print(self.hits)