2011-07-07 40 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忽略这种碰撞。但这种情况正在发生。请提供一些物理初始化代码,以获得更详细的答案为什么会发生。