【发布时间】:2014-06-24 16:34:13
【问题描述】:
我正在使用 cocos2d-x 和 box2d。我正在检测与 box2d 的碰撞,除了一件小事之外,一切似乎都很顺利。由于某种原因,当物体发生碰撞时,它们会相互反弹。现在我读了一点,发现恢复原状会导致这种情况。所以我打开物理编辑器并将两个对象都设置为 0.0。它仍在这样做,所以我进行了更多研究,发现有一个静态/运动的物体也会阻止这种情况的发生,所以在一个物体上我能够做到这一点,因为它没有应用重力等,而是与另一个物体对象我必须让它保持动态,以便它会对其施加重力。所以现在当它碰到运动体时会停止,但动态体仍在从另一个物体反弹。它似乎只在它撞击的顶点成一定角度的地方这样做。有什么真正的方法可以告诉它根本不动。当这种情况发生时,它会将我的主角从屏幕上推开。
更新: 好的,所以也许我做错了。我只是在努力学习,所以我认为“flappy bird”项目将是一个很好的学习体验。所以我想我需要一个物理引擎,所以我选择了 box2d,这样鸟儿就会自己掉下来。然后我现在只是移动棒球棒的图像(向左移动,因为鸟固定在 x=birdheight / 2 和 y=screenheight / 2)来测试碰撞。第一次发生碰撞时撞到了正方形,所以我研究了如何更改矩形。在这样做时,我遇到了物理编辑器。然后我更新了图像并得到了一个 box2d 导出的灯具。然后我将蝙蝠图像从一个简单的 sprite 重做为一个 box2d 主体,这样我就可以检测到与正确的新矩形的碰撞。当我第一次实现检测时效果很好,但是两个对象都被推向屏幕滚动的方向(向左)。因此,经过一番阅读后,我将蝙蝠图像转换为静态物体,然后停止推动蝙蝠,但小鸟仍在移动。我基本上只使用 box2d 来让鸟自己掉下来,并检测矩形的碰撞,使其比图像的简单正方形更精确。我是完全做错了,还是缺少什么让碰撞检测停止在十字路口的确切位置?
【问题讨论】:
-
如果您使用的是 cocos2d-x v3,您是否看过新的 PhysicsEngine?
-
我不确定您指的是什么。我大约一周前刚刚下载了物理引擎,当我点击检查更新时,它说没有可用的。我也不确定这将如何解决我的问题?
-
我们在谈论多少反弹? Box2D 是为速度而不是准确性而构建的,结果通常不是理想的结果。我不知道有什么方法可以完全消除弹跳,但是如果两个夹具的恢复都为 0,则弹跳应该非常小。您可以尝试减少时间步长。
-
如果我减少时间步长不会降低世界的速度吗?抱歉只是游戏编程的菜鸟:)
-
我刚刚更新了这个问题,希望有人能对这个问题有所了解。除了碰撞检测之外,我已经能够弄清楚我所研究的所有其他内容。我真的希望它停在十字路口的确切位置,并且非常感谢我能得到的任何帮助。我看过的所有教程和我发现的源代码都没有交叉碰撞检测,只是基于原始的“矩形”或“圆形”。
标签: box2d cocos2d-x cocos2d-x-3.0