【发布时间】:2015-06-28 22:56:33
【问题描述】:
我正在尝试使用 libgdx 为 android 制作 RTS。我想要碰撞检测,以便能够检测武器范围内的船只以及我的子弹与船只之间的碰撞。
到目前为止,我的策略是使用我自己编写的 PM QuadTree 来存储每个多边形的每个段。一个多边形是一艘船的碰撞箱。
我清除每一帧并将所有段添加回四叉树中。每个段都引用了它所属的船。当我添加一艘船时,我会根据与节点边界的交集将它递归地添加到四叉树的节点中。
检测碰撞是通过轮询矩形内的每个多边形来完成的,这些多边形会查看完全或部分适合矩形内的每个节点。
我的问题是每帧添加每艘船会在 Android 上产生不好的结果。在桌面上它足够快,但在 Android 上它可能需要 100 毫秒才能添加大约 200 个段。
我的实现是否有问题(不应该这么慢?)或者我应该使用其他策略进行碰撞检测?我曾考虑每 5 帧清除一次四叉树,但这会使检测变得不精确。
我测量到,在我的 android 上计算交集的一些简单数学运算最多需要 50 次,但我不知道为什么。当然,我的手机 CPU 不会比我的笔记本电脑慢 50 倍,是吗?
编辑:这是一个移动速度足够快的 RTS。通常整个车队都在移动,因此每个部分都在移动。在那种情况下,它不会加快我的插入速度。我需要大约 50 或 100 的一致加速才能获得每秒 100 帧。
【问题讨论】:
-
在转向 Libgdx 之前,我已经对 Android 上的 openGL 和 FPS 进行了大量研究,但是使用 OpenGL 的所有东西都有一个问题:OpenGL 绘图强制垂直同步。您无法获得比屏幕更新间隔更快的帧速率。所以你被困在 30 或 60 帧(虽然有些可能更高)。这就是 delta 的用途,以在不同的帧速率上准确地获得诸如加速度之类的东西。这不是问题的答案,但我的观点是,除非显示器的显示更新频率为 100,否则您无法在手机上获得 100 FPS(此处不记得单位)
标签: android libgdx collision-detection