ボールが跳ね返る方向を変える

前回まででブロック崩しらしくなったのですが、バーにボールが当たったときの跳ね返りが一定だったために面白みに欠けるものがありました。そこで今回はボールがバーの端にあたった場合は角度が急になるように変化をつけました。

ReflectiveDirection列挙体の作成

まずはReflectiveDirection列挙体を作成します。これは通常の跳ね返りか強く左右に反発するかを示すものです。

GetReflectiveDirectionメソッドの作成

次にどのような場合に強く反発するのかを決めます。

バーの当たり判定は、ボールが内接する矩形の端とバーの矩形の端が完全に離れていないのであれば「当たり」と判定しています。そこでボールの右側がバーの左側から2/5より外の場合は強く左に反発し、ボールの右側が3/5より外の場合は右に強く反発させます。それ以外は普通に跳ね返ります。

ボールが内接する矩形の端とバーの矩形の端が完全に離れていないのであれば当たり判定しているため、思ったほど強い反発は起きません。

SetBallDirectIfHitBarメソッドの変更

左右に強く反発する場合、ボールの進行方向を変える必要があります。これまでのボールの進行方向によってX成分の符号を変えるべきかどうかは変わってきます。

またボールの進行方向のY成分もただ符号を反転するだけでなく、下に落下しているときだけ符号を反転しています。こうしないとときどきボールがバーの上で振動する現象がおきてしまいます。