有效的多边形碰撞检测

时间:2017-07-15 15:46:34

标签: java libgdx

我正在尝试让人们能够拿起我为循环更新每枚硬币的硬币而且每枚硬币都有一个循环来检查是否有任何玩家正在触摸它所以它像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;
    }
}

coins.size是250

和players.size是25

2 个答案:

答案 0 :(得分:0)

我首先只从玩家的角度进行检查 - 硬币不需要检查是否有任何东西与它们相撞,除非除了与硬币交互的玩家之外还有其他东西。根据玩家的形状,它可以很好地让玩家在玩家所在位置的某个半径内拾取所有硬币 - 如果你想这样做,只需找到玩家到每个硬币的距离并选择如果它在那个距离内,那就硬币了。 (实际上检查距离平方更有效 - 结果是一样的)。如果您不想使用半径作为拾音器本身,那么如果您只针对可能重叠的距离内的硬币测试每个玩家,它仍然会大大减少所花费的时间。

答案 1 :(得分:0)

我通过进行空间网格检测来解决这个问题。它将循环量减少了大约40倍。