java - 有效的多边形碰撞检测

标签 java libgdx

我正在尝试让人们能够捡起我制作的 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/

相关文章:

java - LibGDX And​​roid 部署应用程序时出错 : java. lang.ExceptionInInitializerError

java - 如何导入 LibGdx 示例项目

java - 格式化为两位小数和 1 个符号

java - 如何安装JDBC以及如何使用它来连接mysql?

java - 部分用户出现安全异常 : Attempted to to open a sandboxed jar as a Trusted-Library

java - 如何从面板内切换 JFrame 中的 JPanel?

java - LibGDX - 绘制弯曲标签

java - 为什么 libGDX image.getHeight() 返回零?

java - libGDX 仅编译黑屏

java - 通过工厂模式设置最终变量