2013-03-17 16 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