2

ブレイクアウト クローンを作成していますが、ボールとパドルの衝突に少し問題があります。ボールとパドルの両方を表す長方形があり、それらが交差すると、ボールの速度を表す Y ベクトルが無効になります (以下に示すように)。それはすべてうまくいきます。問題は、パドルが右に動いているときです。ボールを少し右に動かしたいのですが (通常は反射するのとは対照的に)、パドルが動いている反対方向に同じことが起こるようにしたいのです。左。これを行う方法がわからず、すべてを見てきました。どんな助けでも大歓迎です。ありがとう。

if (paddleRectangle.Intersects(ballRectangle))
{
    ballVelocity.Y *= -1;
    collision.Play(); //a collision sound
}

編集: 基本的に、パドルが動いている方向に基づいて、ボールがパドルから跳ね返る角度を少し変更したいと考えています。パドルが動いていない場合、ボールは正常に跳ね返ります (ボールの速度の Y 成分を反転させることにより)。

4

3 に答える 3

4

パドルの速度ベクトルをパドルの法線ベクトルに追加し (これは基本的にパドルが動いている方向に法線を曲げます)、結果を正規化します。これを反射の衝突法線として使用します。

Vector2 collisionNormal = Vector2.Normalize(paddleNormal + (paddleVelocity * desiredEffectAmount));
ballVelocity = Vector2.Reflect(ballVelocity, collisionNormal);
于 2013-10-02T22:02:15.330 に答える
1

私は頭の中でいくつかのグラインディングを行いました...そしてこれが結果です。それを達成するには、パドルの移動方向、パドルの速度、ボールの速度、ボールの方向が必要です。次に、いくつかの数学関数によって、バウンスの角度と速度を計算します。

この画像 (バウンスが物理的に正しい場合) は、これを作成する方法を理解できると思います。これを処理する機能についてはお手伝いできませんが、画像のように試してみます。

ここに画像の説明を入力

于 2013-10-03T08:38:46.213 に答える