如何在pymunk中制作“复合”形状?

时间:2013-03-17 10:52:47

标签: python shapes pymunk

正如标题所说,我如何加入/约束2个pymunk体/形状,以便它们不会作为一个单独的物体? 例如,在这种情况下,我有一个板球棒,由2个独立的身体和多边形组成 我想把蝙蝠的“手柄”加入我的蝙蝠“刀片”中,这样​​我就可以得到一个像蝙蝠一样的物体。

我的代码:

### BAT n Co. ###
# body format: [vertices, offset, position, mass]
bat_bodies_v = [
# bat
    [[[0, 34], [4, 34], [4, 0], [0, 0]],(-2,-20),(103,190),20], # handle
    [[[6, 90] , [0, 32] , [0, 17], [6, 0] , [10, 0], [10, 90]],(-5,-20),(100,100),1100] # blade
]

bat_bodies = []
for vertices, offset, pos, mass in bat_bodies_v:
    moment = pm.moment_for_poly(mass,vertices,offset)
    b = pm.Body(mass,moment)
    b.position = pos

    poly = pm.Poly(b, vertices,offset)
    poly.friction = 0.9

    bat_bodies.append(poly)
    space.add(b,poly)

# the closest I got.
j1 = pm.constraint.PinJoint(bat_bodies[0].body,bat_bodies[1].body)
j2 = pm.constraint.RotaryLimitJoint(bat_bodies[0].body,bat_bodies[1].body,0,0)
space.add(j1,j2)

============= 变为 ================> :此 Start End
我有一个功能,在身体位置绘制绿色圆圈

1 个答案:

答案 0 :(得分:2)

在pymunk中构建复杂形状的最佳方法是将形状附加到同一个体上。因此,除非你有充分的理由将它们分开,我建议你尝试将两种形状添加到同一个体内。

但是,有时您可能想要做其他事情,例如能够破坏对象。我自己并没有真正实现任何目标,但斯科特(花栗鼠)在这篇文章http://chipmunk-physics.net/forum/viewtopic.php?f=1&t=2420&p=10644&hilit=breakable#p10644中写道,使用PivotJoint和GearJoint可能是将两个身体保持在一起的好主意。