ブロック崩し その2

ブロック崩しに必要なものは、「バー」「ボール」「ブロック」の3つくらいだろう。まずは自分が操作する「バー」から作ってみるぞ。Siv3Dでは四角形や丸など色々な図形の描画ができるから、適当に画面の下の方にバーっぽい形のものを作る。更に、左右キーで動かせるようにしてみたぞ。

これだけだとバーが画面端を突き抜けて外へ出て行っちゃうから、現在位置が画面外に出てしまう場合にはそこで留まるようにする。これだけでバーは完成!

次はボール。これはバーと違って自動的に動くようにする。常に現在の位置に「3」をプラスし続けることで、最初は0の位置、次の瞬間は3の位置、その次の瞬間は6の位置‥‥と、パラパラ漫画のキャラクターが少しずつ動くかのようにボールを動かすことができる。更に、画面外へ出てしまいそうな時には、「3」をマイナスするように変更すれば、逆方向へ移動させる‥‥つまり、跳ね返ることができるようになる。後はバーと当たった時の当たり判定だけど、「図形と図形が重なり合った場合」を取得できる便利な関数(スキルのようなもの)があったので、これを使ってみた。こうしてボールの跳ね返りを実装したのが下の図だ。

が、ここでバグが発生! バーとボールが重なった時、ボールを上にバウンドさせる、という命令を書いたんだけど、バーの横にボールが当たった際にも、ボールが上へ飛んじゃった。理想と現実を図に表わすと、こんな感じ。

物理法則を無視しているにも程があるwww これを解消するためには、「ボールがバーの上から当たった」のか「ボールがバーの横から当たった」のかを判定しないといけない。それを判定するにはどうすれば良いのか考えた結果、当たった際の位置で判断することにしてみた。「ボールがバーの横から当たった」ということは、ボールの位置がバーの位置よりも下にあるということだ!

当たり判定の条件に位置を考慮するようにした結果、横からボールが当たった際にはきちんと横へ跳ね返されるようにすることができた。しかし、ここまでは何の苦も無く作ってさっさとブロックを崩す部分を作るはずだったのに、割と苦労してしまった。肝心のブロックを崩すのは、第3回に回すことにします。

戻る