Android 2d游戏碰撞检测

时间:2017-07-23 08:23:11

标签: java android collision-detection game-physics physics-engine

我使用SurfaceView在android studio中开发了一款2D游戏, 它在碰撞环境中并不复杂,只需要检查一个移动点和一些静态圆之间的碰撞,检测一个圆的碰撞,我只需检查if X of the point is between circle minX and maxX && point Y is between minY and maxY of circle

因此,为了检查整个游戏中的碰撞,我重复检查每个帧中所有圆圈的上面代码。

当我有10个圆圈时,游戏工作非常好,但是如果我添加30个圆圈,它的FPS会减少很多,而且我会面临很多延迟!

我应该为这个问题做些什么?我应该使用Box 2d物理吗?即使有太多的物体碰撞在一起,游戏也不会遇到滞后问题,它会对碰撞检测做些什么呢?

请帮我详细说明,因为我很想知道游戏引擎如何工作并决定做一个简单的游戏引擎,不仅想制作和发布游戏(否则我可以使用现成的游戏引擎)。

提前致谢

2 个答案:

答案 0 :(得分:2)

至于游戏引擎如何做到这一点,最简单的方法是直接查看他们的源代码,因为至少有一个版本的Unity可以做到 - 你可以找到Unity here的源代码。

在您的情况下,您可以通过应用程序来减少内存消耗增加,以使碰撞检测基本上保持恒定 - 无论圈数如何,正如@ SagarGautam在评论中所建议的那样。

你可以做的是存储一个boolean的2D数组,指示所有地图像素,如果它在一个圆圈内(按照你以前的代码),则将每个元素设置为true或否则false。在水平/地图的加载阶段执行此操作应该没问题,因为现在在渲染过程中,您只需查找数组中的像素坐标,看它是否在圆圈内。

答案 1 :(得分:1)

在3D游戏中我使用碰撞器,所以检查是否有任何碰撞器(网格,盒子等) 为这些对象提供标记。并通过标记识别它们 例如:

...maven-metadata.xml