あなたのパドルは長方形だと思いますか?簡単にするために、ボールがパドルの面にのみ当たる可能性があると仮定します(つまり、コーナーや側面には当たらない)。
Q:パドルのどこに当たるかによって異なりますか?A:パドルが軸に沿った長方形で、ボールがその表面にしか当たらない場合は、できません。
Q:パドルが動いているかどうかは重要ですか?A:これはあなたの選択です。ゲームの物理学は実際の物理学ではないため、ゲームを最高の状態でプレイするために何でも自由に行うことができます。
まず、ボールの方向を90度回転しても、ボールが壁から正確にたわむことはありません。ボールが壁にぶつかって死んでしまう極端なケースを考えてみましょう。ボールを90度回転させると、ボールは壁の横を平行に移動します。
あなたが現在していることを信じていますが、少し紛らわしいことに、ボールが垂直の壁に当たると、ボールの水平方向が逆になります。もちろん、これはボールの方向を90度回転させることと同じではありません。
パドルからボールに速度を与えたい場合は、ボールの動きをベクトルとして扱い、パドルの動きをベクトルとして扱います。次に、これら2つのベクトルを足し合わせます。ボールに与えられる速度を制御するために、係数を使用し(これを呼びますk
)、ボールが一定の速度を維持する必要がある場合は、ボールの最終的な速度ベクトルを正規化します(ただし、速度を保存しているため) x、yコンポーネントの代わりに、それは必要ありません)。
if (ball hits paddle):
k = 0.5;
// paddle only moves horizontally, which simplifies the math
paddle_vx = paddle_speed * paddle_xdirection;
ball_vx = cos(ball_direction) * speed + k*paddle_vx;
ball_vy = - sin(ball_direction) * speed // flips from the collision
ball_direction = atan2(ball_vy, ball_vx);
ball_speed = 100; // always constant