我是第一次在iPhone上使用BOX2D。总的来说它非常好,但是每当我创建一个包含静态和动态主体的场景时,我都会在ContactManager中的一行上反复获取一个断言。确切的行是......
b2Assert(bodyA->m_type == b2_dynamicBody || bodyB->m_type == b2_dynamicBody);
哪个在void b2ContactManager :: Collide()中。这似乎暗示它在两个物体碰撞时断言,其中一个物体不动态......这根本没有意义。当然,动态物体应该与静态物体碰撞!
除非奇怪地创建静态对象,否则它不会在此行上断言。我有很多动态的盒子在屏幕上移动。一旦我介绍一个静态的,我就在这里崩溃了。
任何人都可以帮助我吗?这看起来像其中一个真的很明显'问题类型!
答案 0 :(得分:0)
你是否在创建静态物体后移动它们? (除了设置它们的初始位置?):我遇到了静态物体被移动导致奇怪问题(不是断言,但奇怪的碰撞行为)的问题,然后发现Box区分静态和运动物体(分别为b2_staticBody和b2_kinematicBody)
运动物体具有无限质量并且不响应力(根据静态)但是声明它们可以手动移动(静态物体也可以手动移动,但是它们不会在响应时移动碰撞等,可能导致奇怪的行为)
可能不是你的问题(因为你暗示它是在制造静态物体之后立即进行的)但可能值得检查我认为+如果你对Box相对较新,你可能已经在手册中看到了这一点。这只是对我的新闻,因为我开始使用Box years之前(突然出现了运动学的概念)
答案 1 :(得分:0)
问题是两个非动态物体发生碰撞。这是不正确的,因为运动和静态物体不应相互碰撞。 box2d忽略了这种碰撞。但它正在你的情况下发生。请提供一些物理初始化代码,以便更详细地解答原因。