2013-12-11 104 views
3

我遇到了Box2D的问题。C++ Box2D,通过运动物体模拟动态身体行为

我编了一个像这个魔兽争霸3地图的游戏。

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

,你控制一个字符,可以抛出可与物体发生碰撞的火球。

对于火球和支柱之间的碰撞,例如我为两者使用了运动物体(通常它们不会相互碰撞,但是通过黑客我得到了它的工作),这很好,因为我只需要跟踪碰撞,而且不能使用因为我不希望它们在碰撞时被分开(OnTouch行为在拼写脚本中实现)。

但是现在我需要支柱和角色之间的碰撞,所以基本上我希望它们的行为像橡皮球,当角色被投掷时速度x对着它应该反弹的支柱。但为此,我需要动态物体的行为,那么是否有一种简单的方法来模拟具有运动物体的动态物体的行为? (也许覆盖的东西?)

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

+0

如果您不希望联系人执行任何碰撞响应,您可以在BeginContact回调中调用contact-> SetEnabled(false)。 – iforce2d

回答

3

听起来好像你需要为所有事物使用动态物体,但是更明确地控制它们在发生碰撞后的反应。例如,所有“子弹”就像传感器一样,或者使用组ID或掩码位来使其不与其他物体发生物理碰撞。尽管没有碰撞响应,但您可以创建一个回调来检测碰撞并根据此回调决定要执行的操作。

黑客的物理看起来像你可能破坏稳定可靠的事情......自己做了这件事,我很欣赏这种倾向。

看看this tutorial和紧接它之后的那个。他们真的有很好的信息(不,他们不是我的......)。

有关联系人筛选的更多信息,请查看此other article

+0

以某种方式帮助我,我现在得到了99%的行为我想要的,唯一我没有得到的是,当1个字符移动到另一个,另一个被推开,但生病了解决方式,不知何故,谢谢 –

+0

我想你可能需要添加某种接触式过滤。我在帖子中添加了第二个参考。如果你不想让尸体发现,你可以让它们成为不同群体的一部分(朋友碰撞,敌人互相伤害和碰撞等)。要弄清楚的关键之一是**你希望根据不同的群体做出回应。 – FuzzyBunnySlippers

0

我建议你看看Chipmunk库!

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