2011-07-07 38 views
0

我在iPhone上首次使用BOX2D。總的來說,它一直很不錯,但是當我創建一個同時包含靜態和動態主體的場景時,我不斷地在ContactManager的一行中斷言。確切的線是...Box2D導致斷言的靜態/動態物體之間的分割

b2Assert(bodyA->m_type == b2_dynamicBody || bodyB->m_type == b2_dynamicBody); 

這是在void b2ContactManager :: Collide()。這似乎表明它主張兩個物體相撞時,其中一個不是動態的......這根本沒有意義。當然,動態物體應該與靜態物體碰撞!

它不會在這條線上斷言,直到我奇怪地創建靜態對象。我有大量的動態盒子在屏幕上移動。只要我介紹一個靜態的,我會在這裏發生崩潰。

誰能幫助我嗎?這似乎就是那些「非常明顯」的問題之一!

+1

如果您的靜態主體是在現有的動態主體之上創建的,但是我不明白爲什麼它需要是斷言,則會發生這種情況。你知道這是什麼版本的Box2D嗎?在當前版本中,這不是一個斷言,如果兩個主體都不是動態的,它就不會做任何事情。 – iforce2d

回答

0

你在創建靜態物體後移動嗎? (除了剛剛設置的初始位置?):我遇到了靜態物體移動導致的奇怪問題(不是斷言,而是奇怪的碰撞行爲),然後發現Box區分靜態和運動物體(分別爲b2_staticBody和b2_kinematicBody)

運動物體具有無限的質量並且不會對力作出響應(按照靜態),但據說它們可以手動移動(靜態物體也可以手動移動,但它們不會在響應時移動碰撞等,並可能導致奇怪的行爲)

可能不是你的問題(因爲你意味着它是在靜態物體後立即),但可能值得檢查我想+如果你是比較新的盒子,你可能有已經看到這一點在手冊中。這只是作爲新聞傳遞給我的,因爲我之前開始使用Box(突然出現運動學概念出現)

0

問題是兩個非動態物體碰撞。這是不正確的,因爲運動和靜態物體不應該相互碰撞。 box2d忽略這種碰撞。但這種情況正在發生。請提供一些物理初始化代碼,以獲得更詳細的答案爲什麼會發生。