【问题标题】:Box2d Bodies that are really close together, are getting "stuck"非常靠近的 Box2d 实体正在“卡住”
【发布时间】:2014-11-11 18:12:51
【问题描述】:

我使用的是平铺的 tmx 地图,我创建了一个类,可以将实体添加到特定图层中的每个平铺。到目前为止,这一直很有效,除了当角色或敌人在屏幕上四处移动时,它的身体会卡在两个瓷砖之间的边缘。

这似乎“有时”在某些地方发生。跳跃让你解开,但它发生时很烦人,我尝试增加位置迭代,但问题不断重复出现。

这是我的游戏的样子:http://i.stack.imgur.com/f5Igm.png 我没有渲染瓷砖,以便更容易看到瓷砖的主体是什么样子

【问题讨论】:

  • 对于以后的问题,您可能会在GameDev.SE得到更好的答复。
  • 这在 Box2D 的整个生命周期中已被多次报告。您最好的解决方案是使用边缘形状而不是瓷砖。 iforce2d.net/b2dtut/ghost-vertices
  • 啊,我看到那篇文章内容丰富。我将尝试使用边缘形状,如果不是,我可能会尝试实施一种方法来检测瓷砖是否彼此相邻,这样我就可以为那个碎片制作一个更大的身体。这完全应该是一个答案而不是评论

标签: java libgdx box2d sprite


【解决方案1】:

发生的情况是,上部动态主体的“皮肤”可以嵌入到其下方的形状中。如果上半身随后穿过下部形状并遇到其中一个形状的角,则物理引擎会产生与行进方向相反的脉冲。

轰隆隆!上半身卡住了。

这是一个放大的图像,显​​示了向右移动的上部矩形:

从它们延伸出来的蓝色点和线是 Box2D 流形计算代码确定需要应用脉冲的地方。注意红色/棕色矩形右侧的蓝色点和线。这些是反对的冲动。

正如 32 上校在 cmets 中建议的那样,一种解决方案是在边缘形状中为较低形状使用“ghost-vertices”机制(或者只使用链形状来有效地为您计算边缘)。

作为背景,我有自己的fork of Box2D,我一直在开发,我刚刚推出了一个替代解决方案来解决这个问题,它不需要较低的形状是边缘(或链)形状。我也做过a write-up of this alternative

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多