PICO-8でブロック崩しを作ろう(ボールの反射角度をコントールする
今回はパドルの動きによって反射するボールの角度が変わるような実装をしてみます。
実際の物理法則を正確にシミュレーションする必要はなくそれっぽく動いてくれればいいので…ボールとパドルがぶつかって反射処理をおこなう際に、
パドルの動き(速度)とボールの動き(速度)が向かい合っている(相対)場合は反射するボールの角度が高くなる
パドルの動き(速度)とボールの動き(速度)が同じ方向(並走)の場合は反射するボールの角度が低くなる
みたいな実装をすればいけるのではないでしょうか?
いきなり実装した画面を表示しますが・・・
serveball()
まずはserveball()にてグローバル変数ball_angを追加します。
ball_angは0〜2の値をとり、ボールの反射角度を示します。
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_angが0〜2の範囲を超えないようにします。
本日の成果物
この記事が気に入ったらサポートをしてみませんか?