0

これはアルカノイドのボール衝突の私のコードです:

Rectangle intersection = Rectangle.Intersect(block.Rect2D, ball.BallRec);

if (intersection.Width > intersection.Height)
{
    ball.yVel = -ball.yVel;
}
else if (intersection.Width < intersection.Height)
{
    ball.xVel = -ball.xVel;
}
else
{
    ball.xVel = -ball.xVel;
    ball.yVel = -ball.yVel;
}

残念ながら、特に高速の場合、ボールはブロックに「溶けて」奇妙に跳ね返ることがあります。どうすれば修正できますか?

4

1 に答える 1

1

衝突が検出された場合、ボールの方向を変えるだけでは不十分であり、位置も変える必要があります。ボールが20ピクセル移動し、ブロック内に5ピクセル移動した場合は、ボールをブロックから5ピクセル離す必要があります。

また、衝突を検出しているブロックがボールの古い場所と新しい場所のにあったかどうかを確認する必要があります。

于 2013-02-14T16:25:15.797 に答える