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

Java Objects in Array - 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 所说的,我相信这会是检查每一次可能碰撞的更好方法,但是如果你有非常多的球,那么你可能需要做一些事情来减少你检查的次数正在这里制作。或者,您可能需要改进检查碰撞的代码。

您需要另一种数据结构。例如,包含 List<Ball> ballsThatCollide; 或类似内容的对象 Collision。或者每个 BallList<Ball> inCollisionWith。如果你想要简单的数组,那么你需要一个 N 维数组,其中维度是球,交点是碰撞。