我使用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物理吗?即使有太多的物体碰撞在一起,游戏也不会遇到滞后问题,它会对碰撞检测做些什么呢?
请帮我详细说明,因为我很想知道游戏引擎如何工作并决定做一个简单的游戏引擎,不仅想制作和发布游戏(否则我可以使用现成的游戏引擎)。
提前致谢
答案 0 :(得分:2)
至于游戏引擎如何做到这一点,最简单的方法是直接查看他们的源代码,因为至少有一个版本的Unity可以做到 - 你可以找到Unity here的源代码。
在您的情况下,您可以通过应用程序来减少内存消耗增加,以使碰撞检测基本上保持恒定 - 无论圈数如何,正如@ SagarGautam在评论中所建议的那样。
你可以做的是存储一个boolean
的2D数组,指示所有地图像素,如果它在一个圆圈内(按照你以前的代码),则将每个元素设置为true
或否则false
。在水平/地图的加载阶段执行此操作应该没问题,因为现在在渲染过程中,您只需查找数组中的像素坐标,看它是否在圆圈内。
答案 1 :(得分:1)
在3D游戏中我使用碰撞器,所以检查是否有任何碰撞器(网格,盒子等) 为这些对象提供标记。并通过标记识别它们 例如:
...maven-metadata.xml