数组中的 Java 对象 - 碰撞检测

标签 java android collision-detection

假设我有这样的代码:

private void actuallyDrawGraphics(Canvas canvas) {
    canvas.drawColor(Color.WHITE);

    for(Ball ball : balls){

        canvas.drawBitmap(ballBitmap,
                -16 + (ball.x / 100f) * canvas.getWidth(),
                -16 + (ball.y / 100f) * canvas.getHeight(),
                paint
                );
    }
}

每个球都注册在一个数组中。我需要进行一次碰撞(当一个与第二个碰撞时),一切都会顺利,直到我有更多的球,例如 10 个。进行如下检查的效率不高:

球 1 与 2、3、4...

球 2 与 1、3、4...

有什么办法可以做到这一点吗?

最佳答案

for (int i = 0; i < balls.size(); i++) {
    Ball ball = balls[i];
    for (int a = i + 1; a < balls.size(); a++) {
        Ball ball2 = balls[a];
        // check for collision with ball and ball2.
    }
}

就像 Nacho 所说的那样,我相信这将是检查每一次可能的碰撞的更好方法,但如果你有大量的球,那么你可能需要做一些事情来减少你在这里进行的检查数量。或者,您可能需要改进检查冲突的代码。

关于数组中的 Java 对象 - 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460510/

相关文章:

ListActivity中标题栏中的Android自定义字体

android - Robolectric 说 "AndroidManifest.xml not found"

android - React Native Android - 如何能够滚动 TextInput

lua - 使用 Storyboard库 [CORONA sdk] 恢复场景后,onCollision 中的 event.other 为零

Swift:因为两次检测到碰撞,分数增加了两倍?

java - MySQL Netbeans Java 结果集失败

java - 从数组中选择第 i 个最小的元素

java - 如何在 Java 中比较字符串?

swift - SpriteKit - didBegin contact 被调用 30 次而不是 1 次

java - 在 Java 中删除字符串中第一个单词的最佳方法