2011-02-13 34 views
1

我正在使用Chipmunk cocos2d來創建一個聲音生成遊戲,在這個遊戲中碰撞粒子會產生噪音。但是現在,我遇到了一個問題:我的粒子不斷地落在地板上!花栗鼠的物體以高速落地。幫幫我?

在這個例子中「彈跳球」模板,對進入加速流乘數是相當低(約100.0f),但得到的東西,真正迅速作出反應,我搖動起來:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)accel 
{ space->gravity = cpvmult(cpv(accel.x, accel.y), 10000.0f); // originally 100.0f 
} 

我發現這可以通過使dt非常小來加以改善,輪詢1/240秒左右的加速度計。

這是最好的方法嗎?是否有另一種方式對Chipmunk說:「向外看,這些東西移動得很快」?

+0

Box2d能夠將動態身體標記爲'子彈'(http://www.box2d.org/manual.html#_Toc258082973),它會觸發一些額外的檢查,看看它是否碰到另一個動態身體路徑。我對Chipmunk不太熟悉,但也許有一種類似的概念埋在它的某處? – 2011-02-14 15:11:32

+0

是的,也許Box2d會成爲這裏的答案。 – buildsucceeded 2011-05-17 08:59:26

回答

3

一般來說,許多物理引擎在快速移動的物體之間碰撞是很困難的,這些物體相對於它們的速度很小。我不知道花栗鼠的具體情況,但是您的問題意味着在某個時間間隔內會對交叉對象執行檢查。如果物體快速移動且很小,則可能會跳過發生碰撞的時間間隔。

兩個最簡單的解決方案是使用較小的時間間隔,或以某種方式使兩個對象中的一個變大。你如何代表地板?如果您可以將其表示爲厚矩形,那也應該可以減少問題。

更難的解決方案是使用更復雜的相交算法,例如使用bounding capsules來表示兩個樣本之間的球體所穿過的空間面積。如果API尚不支持這一點,那麼這是一個相當大的數學和修改。