【问题标题】:Box2D colission between static/dynamic bodies causing an assert导致断言的静态/动态主体之间的 Box2D 碰撞
【发布时间】:2011-07-07 15:23:19
【问题描述】:

我是第一次在 iPhone 上使用 BOX2D。总的来说,它非常好,但是每当我创建一个包含静态和动态物体的场景时,我都会在 ContactManager 中不断地得到一个断言。确切的行是...

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

在 void b2ContactManager::Collide() 中。这似乎表明当两个对象发生碰撞时它会断言,其中一个对象不是动态的……这根本没有意义。当然,动态物体应该与静态物体碰撞!

在我奇怪地创建静态对象之前,它不会在这条线上断言。我有大量的动态框在屏幕上移动。一旦我引入一个静态的,我就会在这里崩溃。

谁能帮帮我?这似乎是那些“非常明显”类型的问题之一!

【问题讨论】:

  • 如果您的静态主体是在现有动态主体之上创建的,则会发生这种情况,但我不明白为什么它需要成为断言。你知道这是哪个版本的 Box2D 吗?在当前版本中,这不是一个断言,如果两个主体都不是动态的,它就什么也不做。

标签: box2d collision


【解决方案1】:

创建静态物体后你会移动它们吗? (不仅仅是设置它们的初始位置?):我遇到了静态物体被移动导致奇怪问题(不是断言,而是奇怪的碰撞行为)的问题,然后发现 Box 区分静态和运动物体(分别为 b2_staticBody 和 b2_kinematicBody)

运动物体具有无限质量并且不响应力(根据静态),但据说它们可以手动移动(静态物体也可以手动移动,但它们不会在响应时移动碰撞等,并可能导致奇怪的行为)

可能不是您的问题(因为您暗示它是在制作静态物体之后立即发生的)但我想可能值得检查 + 如果您对 Box 比较陌生,您可能已经在手册中看到了这一点。这对我来说只是新闻,因为我很久以前就开始使用 Box(突然出现了运动学的概念)

【讨论】:

    【解决方案2】:

    问题是两个非动态物体发生碰撞。这是不正确的,因为运动学和静态体不应相互碰撞。 box2d 会忽略这种碰撞。但它正在发生在你的情况下。请提供一些物理初始化代码以获得更详细的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多