Scratchの達人 #7 当たり判定の自作
こんにちは。麻生菜乃(あそう なの)といいます。
2022年12月に「Scratchの達人」を出版しました。この本は、初心者を卒業したScratch使いが、より深いプログラミングができるるようになることを目標とした、Scratchの解説書です。読者が楽しみながら読み進められるように、主に4つのゲームのプログラミングを通して、いろいろなことを解説しています。
今回は本書の中から、当たり判定を自作した理由などについて紹介します。
Scratchの当たり判定の長所
そもそも、Scratchには以下の3つのブロックが、当たり判定のために用意されています。
a. 「( )に触れた」
b. 「( )色に触れた」
c. 「( )色が( )色に触れた」
また、複数のブロックを組み合わせて、
d. 「もし(スプライト)までの距離 <( 50 )なら」
のようにすれば、スプライト同士の距離によって、当たり判定を行うことができますよね。
これらのブロックは簡単に組み込めてとても便利ですし、初心者からベテランまでプログラムを作るにあたって十分な機能を持っています。
Scratchの当たり判定の欠点
ですがこれらには、以下のような欠点があります。
1.スプライトの大きさを変えずに、当たり判定の範囲を変えられない (a,b,c)
アクションゲームやシューティングゲームでは、スプライトの当たり判定の大きさを変えて、ゲームの難易度を調整できます。例えば自機の当たり判定の範囲が広いと敵弾に当たりやすいので難しくなります。逆に、当たり判定の範囲が狭いと敵弾に当たりにくいので簡単になります。
ですが、Scratchではスプライトの大きさを変えずに、当たり判定の大きさを変えられません。つまりaからcは、スプライトの大きさを変えずに当たり判定の大きさを変えて、難易度を調整することができません。
2.ステージの外で当たり判定を行えない(a,b,c,d)
Scratchではスプライトにステージ外の座標値をセットしても、必ずスプライトの一部がステージに表示される値になってしまいます。そのため、ステージの外にいる敵機や対戦相手に自弾を当てる、というようなことができず、ステージの外に遊びを広げることができません。
これらの欠点を回避するために、本書では当たり判定を自作しています。
当たり判定の自作
本書では「四角形による当たり判定」を自作しています。この当たり判定は、各スプライトの形を四角形とみなして、スプライト同士が当たっているかどうかを判定する方法です。
具体的には、下図のスプライトを囲んでいる四角形を、当たり判定の範囲として処理を行います。(四角形は表示しません)
この方法はプログラムが単純なので、バグが出にくいという長所があります。また、計算量が少なくコンピュータにかかる負荷が小さいので、大量のスプライトの処理に適しています。短所はスプライトの見た目を四角形か、これに近い形にしておく必要があることです。そうでなければ見た目と判定結果があわなくなる可能性があります。
この当たり判定を実装することで、本書のサンプルゲームでは難易度の調整が簡単に行えます。また、背景スプライトによるスクロールとあわせることで、ステージよりも大きなゲームフィールドで当たり判定を行う対戦型のシューティングゲームを作成します。
Scratch以外でも使えます
この当たり判定は、Scratch以外のPC・スマートフォン・ゲーム機でゲームを作るときにも使える手法ですので、ゲームプログラマーを目指す人は、一般教養としてぜひ習得してほしいな・・と思います。また本書内では、すべてのプラグラムと仕組みについて、きっちりと説明しています。興味を持たれた方は、ぜひご一読ください!
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?