画面上をランダムな速度で移動するボール オブジェクトの配列を初期化する必要がある小さな演習に取り組んでいます。ボール同士が衝突したときに速度を逆転させる必要があります。問題は、各ボールをそれ自体と比較することしかできないため、ボールが常に「交差」して前後に揺れていることです。私はボール[i]とボール[i]を比較しているので、この下のifステートメント内に問題があると感じています。ここで、「i」は同時に同じ数です。ball[i] を intersect 関数に渡すとき、すべての要素をそれ自体を除く他のすべての要素と比較する必要があります。私はいくつかの方法を試しましたが、うまくいきませんでした。
// draw() 内の for ループ
for(int i = 0; i < balls.length; i++){
//balls[i].drawBalls();
//balls[i].moveBalls();
***if (balls[i].intersect(balls[i])) {
balls[i].moveIntersectingBalls();
}***
}
//ボール交差メソッド
boolean intersect(Ball b) {
float distance = dist(bXpos,bYpos,b.bXpos,b.bYpos);
if (distance < bRadius + b.bRadius) {
return true;
} else {
return false;
}
}
//交差する場合はボールが動くメソッド
void moveIntersectingBalls(){
bXspd *= -1;
bYspd *= -1;
}