如何在pymunk中创建“复合”形状?
如标题所示,我该如何将两个pymunk的物体或形状连接起来,使它们不作为一个整体来运作呢?
举个例子,我有一个板球棒,它是由两个独立的部分和多边形组成的。
我想把棒子的“把手”连接到棒子的“刀刃”,这样我就能得到一个像棒球棒的物体。
我的代码:
### 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)
这个 ============= 变成 ================> 这个
我有一个函数可以在物体的位置上画出那些绿色的圆圈
1 个回答
3
在pymunk中,构建复杂形状的最佳方法就是把这些形状放在同一个物体上。所以,除非你有特别的理由想把它们分开,否则我建议你把两个形状都添加到同一个物体里。
不过,有时候你可能想做点别的事情,比如让这些物体可以被打破。我自己还没有实现过什么,但Scott(Chipmunk的开发者)在这篇帖子中提到,使用PivotJoint和GearJoint可能是个不错的主意,可以把两个物体连接在一起。你可以查看他的帖子了解更多信息:http://chipmunk-physics.net/forum/viewtopic.php?f=1&t=2420&p=10644&hilit=breakable#p10644。