我正在尝试让人们能够捡起我制作的 for 循环来更新每个硬币,每个硬币都有一个循环来检查是否有任何玩家正在触摸它,所以它就像每个刻度/帧 250*25=6250 个循环,有什么建议如何使其更有效吗?这样我在玩手机时 ping 就不会下降到 30?
屏幕渲染代码:
for (int i = 0; i < coins.size(); i++) {
Coin coin = coins.get(i);
coin.update(delta);
}
金币更新方法:
for (int i = 0; i < GameScreen.players.size(); i++) {
Player player = GameScreen.players.get(i);
if (Intersector.overlapConvexPolygons(polygon, player.getPolygon())) {
//Picked up give coins blahblahblah
break;
}
}
硬币大小为250
players.size 为 25
最佳答案
我首先从玩家的角度进行检查——硬币不需要检查是否有任何东西与它们发生碰撞,除非除了玩家之外还有其他东西与硬币交互。根据玩家的形状,让玩家拾取其位置一定半径内的所有硬币可能会很有效 - 如果您想这样做,只需找到玩家到每个硬币的距离,然后拾取在该距离内的硬币。 (实际上,检查距离平方更有效——结果是相同的)。如果您不想使用拾取器本身的半径,那么如果您仅针对可能重叠的距离内的硬币来测试每个玩家,它仍然会大大减少所需的时间。
关于java - 有效的多边形碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45120016/