ボールがブロックに衝突した際に,どの側面に当たったのかを判定し,それに応じてボールの動きを変える処理を,BlockModel クラスの moveBall メソッド内に実装した.さらに,ブロックの上下左右のどの面に衝突したのかを判定するために,ブロックを4つのエリアに分割し,ボールがどのエリアに重なったかによって衝突位置を判断するようにした.
この判定結果に基づいて,ボールの跳ね返り後の動きも moveBall メソッド内で定義している.たとえば,ブロックの左側または右側に衝突した場合は,ボールのy軸(縦方向)の速度はそのままに,x軸(横方向)の速度を反転させる.一方,上側または下側に衝突した場合は,x軸方向の速度を保ちつつ,y軸方向の速度を反転させるようにしている.
衝突判定はまず checkHit メソッドでボールがブロックに当たったかどうかを判定し,当たっていた場合に,どの側面に衝突したかを moveBall メソッド内で判断する構成となっている.