見出し画像

PICO-8でブロック崩しを作ろう(ボールの反射角度をコントールする

今回はパドルの動きによって反射するボールの角度が変わるような実装をしてみます。

実際の物理法則を正確にシミュレーションする必要はなくそれっぽく動いてくれればいいので…ボールとパドルがぶつかって反射処理をおこなう際に、

  • パドルの動き(速度)とボールの動き(速度)が向かい合っている(相対)場合は反射するボールの角度が高くなる

  • パドルの動き(速度)とボールの動き(速度)が同じ方向(並走)の場合は反射するボールの角度が低くなる

みたいな実装をすればいけるのではないでしょうか?
いきなり実装した画面を表示しますが・・・

ボールとパドルの動きが相対
ボールとパドルの動きが並走

serveball()

まずはserveball()にてグローバル変数ball_angを追加します。
ball_ang0〜2の値をとり、ボールの反射角度を示します。

ballの反射角度とball_angの対応関係

setang()とsign()

setang()sign()の二つの関数を追加します。
setang()ball_ang(0〜2)の入力値によってボールの速度ball_dx,ball_dyを変更する関数です(反射角の変更)。
sign()は入力値が0以下の場合は-1,それ以外の場合は1を返す関数です。
ボールの方向を保持するために使います。

--check if ball hit pad

update_game()内のボールとパドルの衝突処理の箇所でボールの反射角度の変更処理を追加します(黄色枠)
パドルが動いてる(pad_dx>2)ときに
・パドルとボールの動いている方向が同じならball_ang-1
・パドルとボールの動いている方向が逆ならball_ang+1
します。
このときmid()関数を使ってball_ang0〜2の範囲を超えないようにします。

本日の成果物





この記事が気に入ったらサポートをしてみませんか?