
ブロック崩しを作ってみる 4日目
本日の作業内容
ボールがブロックで反射する
ボールが接触したブロックが消える
ボールがブロックで反射する
壁で反射するのは簡単に実装できたからブロックで反射も楽勝だぜ!
そう考えていた時期が私にもありました
上下左右方向から接触する際の反射は壁とほぼ同じなのでいいのですが、
角にぶつかった際の挙動および当たり判定が難しすぎました
数学的知識が俺にもっとあれば外積とかで解けそうな気がするのですが、いかんせんやり方がわからないもので、
結局泥臭い方法での実装となりました
泥臭い当たり判定検知方法

図が汚い
ブロックよりも左なら1、上なら2、右なら4、下なら8を加えることでその合計で上下左右+斜め4方向のどこにいるのかを検知できます
上下左右の場合は壁反射と同じことをします。
斜めの場合は、角から45度の直線が生えているものとして
その上側か下側のどちらにいるかを計算して反射する方向を決めました。
これが正しい挙動なのかはわかりません
ゲームページを確認して君の目で確かめてみよう!(宣伝
ボールが接触したブロックが消える
接触したからには消える必要があります
それがブロック崩しの常というもの。
とはいえ、当たり判定に比べればこちらは案外簡単に実装できました。
接触したブロックのIDを記憶しておいて、それを削除するだけです
まだ操作ははできないものの、見た目上はほぼほぼブロック崩しとなりました!
いよいよ明日からプレイヤーの操作に関する処理を実装していきます。
これでやっと遊べるゲームになりますね
震えて待て!