プログラミングテクニック

スクラッチで壁に当たったら跳ね返る3つの方法

こちらでは、スクラッチで壁やスプライトに当たったら跳ね返るプログラミングを3つ紹介しています。

壁の跳ね返り判定の作り方は、こちらの3つです。

  • 「もし端についたら、跳ね返る」ブロックを使う方法
  • ボール(壁)に当たったら跳ね返す方法
  • 入射角から角度を算出して跳ね返す方法
スポンサーリンク

「もし端についたら、跳ね返る」ブロックを使う方法

スクラッチプロジェクトの中を見る

こちらは、もっとも簡単な壁に当たったら跳ね返るプログラムで、ボールがステージの端(壁)についたら跳ね返ります。

こちらが、ステージの端(壁)についたら跳ね返るスクリプトです。

最初に、「〇度に向ける」ブロックで、スプライト「Ball」を45度に向けています。

そして、「〇歩動かす」ブロックでずっと10歩動かし、「もし端に着いたら、跳ね返る」ブロックを使って、ステージの端(壁)についたら、跳ね返るようにしています。

ボールを打ち合うゲームをポンゲームと言いますが、そういった場合に利用されるプログラムです。

ボール(壁)に当たったら跳ね返す方法

スクラッチプロジェクトの中を見る

こちらは、ボール同士が当たったら跳ね返るプログラムです。

ボール同士の跳ね返りは、入射角・反射角を細かく計算する方法もありますが、こちらでは単純に反対方向へ跳ね返すプログラムとなっています。

こちらは、スプライト「Ball」のスクリプトです。

〇に触れた」ブロックに、スプライト「Ball2」を選択しています。

これで、もしもスプライト「Ball2」に触れたら、「〇度に向ける」ブロックで、スプライト「Ball」の向きを「向き-180」にします。

例えば向きが180度(真下)であれば、「180-180=0」で0度(真上)に向くということです。

-90度(左)であれば、「-90-180=-270」になりますが、-270度はスクラッチでは、90度(右)となります。

つまり、向いている方向とは反対方向へ跳ね返るということです。

スプライト「Ball2」も同じプログラムで、スプライト「Ball」に触れたときに、向いていた方向とは反対方向へ跳ね返る処理にしています。

入射角から角度を算出して跳ね返す方法

スクラッチプロジェクトの中を見る

こちらは、入射角から角度を算出して跳ね返すプログラムです。

スクラッチでは、向きの角度にマイナス角度があるため、水平と垂直それぞれに対して、角度を計算する必要があります。

こちらはスプライト「パドル(上)」のスクリプトです。

内容は、左右矢印キーを使って、スプライトを動かす処理になります。

他のスプライト「パドル(下)」「パドル(右)」「パドル(左)」も同じようにスプライトを動かす処理になります。

こちらはスプライト「ボール」のスクリプトです。

スプライト「パドル(上)」「パドル(下)」の水平面に対する入射角と、スプライト「パドル(右)」「パドル(左)」の鉛直面に対する入射角から、それぞれ反射角を算出しています。

学校で光の入射角と反射角を習ったことがある人は、理解していると思いますが、光の入射角と反射角の角度は等しいという、反射の法則があります。

これと同じ考えで、水平面・鉛直面に対する入射角から、同じ角度の反射角を求めています。

スプライト「パドル(上)」「パドル(下)」の水平面の場合は、「180-向き」で反射角を求めることができます。

例えば、入射角が140度の場合、「180-140=40度」が反射角です。

入射角がマイナスの場合も見てみましょう。

入射角が-150度の場合、「180-(-150)=330度」になります。

スクラッチでは、330度は-30度と同じ角度ですので、-30度が反射角です。

スプライト「パドル(右)」「パドル(左)」の鉛直面の場合は、「-1*向き」で反射角を求めることができます。

例えば、入射角が50度の場合、「180-140=40度」が反射角です。