2013-03-17 15 views
1

正如标题所说,我如何连接/约束2个pymunk主体/形状,以便它们不会作为一个单独的对象?
例如,在这种情况下,我有一个板球蝙蝠,由2个独立的身体和多晶硅组成。
我想将蝙蝠的“手柄”加入到我的蝙蝠的“刀片”中,以便获得一个蝙蝠般的物体。如何在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) 

============= 变得 ============== ==> StartEnd
我有在身体吸引那些绿色圆圈的功能定位

回答

1

在pymunk中构建复杂形状的最佳方法是将形状附加到相同的物体上。所以除非你有很好的理由让你将它们分开,否则我建议你尝试将两种形状添加到同一个物体中。

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

+0

Thx再次。但是如果我确实需要制造两个独立的身体形状,那么我该怎么做?例如,一个易碎的木板,如果关节上有超过x的力,就会断裂,给我2个独立的形状。这如何实现? – pradyunsg 2013-03-19 05:52:00

+0

我也在想。我想要可破坏的物体。您可以单独处理每个形状的碰撞,并且如果您决定破坏形状,则确定其中心。删除旧的,并将相同的形状添加到新的身体。 – Kaliber64 2013-07-31 06:35:29

+0

您是否必须在将两个形状添加到身体之后重新计算一次或者Pymunk会自动执行此操作? – skrx 2017-05-03 09:35:53