私はポンを作っていますが、ボールを4つの壁で適切に跳ね返すアルゴリズムを作成するのは非常に難しいと感じています(西+東側の一部だけがゴールになるため、後でスコアリングを扱います)。ですから、現時点では、ボールをボックスの周りでバウンドさせたいと思います。
ボールが壁に当たったかどうかを検出するのは簡単ですが、新しい角度を計算するのに問題があります。
これは私がこれまでに思いついたものです:
if(dstY == 0) {
// North wall
if(angle < 90) {
newAngle = angle + 90;
} else {
newAngle = angle - 90;
}
} else if(dstX == maxWidth) {
// East wall
if(angle < 90) {
newAngle = angle + 270;
} else {
newAngle = angle + 90;
}
} else if(dstY == maxHeight) {
// South wall
newAngle = angle + 90;
} else if(dstX == 1) {
// West wall
if(angle < 270) {
newAngle = angle - 90;
} else {
newAngle = angle - 270;
}
}
これは衝突の約半分でしか機能せず、本当に醜いように見えます。これは本当に簡単なはずで、これまで何度も行われたと思います。
私のコードでは、dstX/dstYはX/Yの宛先座標です。左上のX=0およびy=0。