【问题标题】:C++ Box2D, Simulating Dynamic Body behavior with Kinematic BodyC++ Box2D,使用运动体模拟动态体行为
【发布时间】:2013-12-11 12:35:08
【问题描述】:

我遇到了 Box2D 的问题。

我编写了一个类似魔兽争霸 3 地图的游戏。

http://www.youtube.com/watch?v=PKa1CNw6Q5A

你可以控制一个角色并可以投掷火球,这些火球会与物体发生碰撞。

例如,对于火球和柱子之间的碰撞,我对两者都使用了运动体(通常它们不会发生碰撞,但是通过 hack 我让它工作了),它工作得很好,因为我只需要跟踪碰撞并且我不能使用动态身体,因为我不希望它们在碰撞时被分开(OnTouch 行为在拼写脚本中实现)。

但是现在我需要柱子和角色之间的碰撞,所以基本上我希望它们表现得像橡胶球,当角色以速度 x 对着柱子抛出时,它应该反弹。但是为此我需要动态体的行为,那么有没有一种简单的方法可以用运动体模拟动态体的行为? (也许会覆盖一些东西?)

我不知道 Box2D 是如何实习的,如果有人理解我的问题并可以帮助我,我会很高兴。

【问题讨论】:

  • 如果不想让联系人做任何碰撞响应,可以在BeginContact回调中调用contact->SetEnabled(false)。

标签: c++ box2d


【解决方案1】:

听起来您需要对所有事物使用动态物体,但更明确地控制它们在碰撞后的响应方式。

例如,所有类似“射弹”的东西都应该是传感器,或者使用组 ID 或掩码位来制作它,这样它们就不会与其他物体发生物理碰撞。即使没有碰撞响应,您也可以创建一个回调来检测碰撞并根据它决定要做什么。

破解物理学似乎可以破坏可靠工作的东西......我自己做了这件事,我很欣赏这种倾向。

查看this tutorial 和紧随其后的那个。他们真的有很好的信息(不,他们不是我的……该死)。

有关联系人过滤的更多信息,请查看other article

【讨论】:

  • 这以某种方式帮助了我,我现在得到了我想要的 99% 的行为,唯一我没有得到的是,当一个角色移动到另一个角色时,另一个角色被推开,但不知何故修复了,谢谢
  • 我认为您可能需要添加某种联系人过滤。我在帖子中添加了第二个参考。如果你不想让身体相互碰撞,你可以让它们成为不同群体的一部分(朋友碰撞,敌人互相伤害和碰撞等)。要弄清楚的关键之一是什么您希望响应基于不同的组。
【解决方案2】:

我建议你看看Chipmunk图书馆!

这是一个物理引擎 (2D),用 C 编写。我在我的项目中使用过它,效果很好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多