top of page

一分間スクラッチ講座 スクロール6左右の移動時の衝突制御

このブログテーマでは、スクラッチの初心者から上級者まで、ちょっとお役に立つ情報を不定期で紹介していきます。


作成済みのプロジェクトでは、複数のブロックをクローンで作成し、任意の初期位置に配置、スクロールで左右に移動する仕組みを作成しています。最初から作りたい場合は、下記の記事をご参照ください。

ここまで作成してきた作品では、左右のキーが押されたタイミングでクローンで作られたブロックが移動し、プレイヤーが相対的に動いているように見える演出ができました。

ただし、プレイヤーがブロックに当たった時に、上下のジャンプ補正が働き、ブロックの上に乗ったり、下に沈んだりと想定外の動きができていました。

今回の記事では、その部分を修正していきます。

今回も完成作品を共有しますので、合わせてご参照ください


下の動画は不定期配信のファイブボックス 一分間スクラッチ講座」です。ご興味のある方は併せてご参照ください。



1,衝突判定センサーの作成


まずはキャットの左右に障害物があるかどうかを検知する「センサー」を作成します。

このセンサーは、キャットに随時追従し、キャットが壁にぶつかる前に進行方向に障害物があるかどうかを判定する役割を担います。


下の図のように、プレイヤーのスプライトより、左右にはみ出すように配置します。

動画では一旦キャットを複製して、それを基準として作成してみました。このスプライトは、後で透明にするので色はなんでもOKです。


左右のセンサーの役割を担うスプライトを作成

2,衝突判定プログラム


事前に変数を2つ用意します

  • しょうとつR - 右側(Right)に障害物があるかどうかを管理する信号の役割。変数の値は壁があれば 1、なければ 0 を指定します。

  • しょうとつL - 左側(Left)に障害物があるかどうかを管理する信号の役割。変数の値は壁があれば 1、なければ 0 を指定します。


左右の障害物の有無を管理する変数を用意

センサーRのプログラム

旗が押されたとき、に続いて以下の処理を行います


  1. 大きさを50% - Player(キャット)と同じ大きさに指定

  2. 幽霊の効果を50 - 最終的に効果を100にして隠しますが、いったん半透明に

  3. ずっと以下の処理を実行

    1. Player(キャット)に追従

    2. ブロックの検知判定と変数の値指定 ブロックに触れた(右にブロックがある)なら、変数:しょうとつLを1に ブロックがなければ、変数:しょうとつLを 0 に


センサーRのプログラム

センサーLのプログラム

センサーLは変更する変数が違うだけで、センサーRと同じ内容です。

センサーLのプログラム

キャットのプログラム


Player(キャット)には上で値を代入した変数を使って、移動条件を変更します。

作成済みの左右のキーが押されたタイミングで、変数:スクロールXを変更する部分を修正します。


まずは右移動の管理

  • 変更前:右向き矢印キーが押されなら

  • 変更後:右向き矢印キーが押された かつ しょうとつR = 0 つまり右側に障害となるブロックがない場合だけ移動できるようにします。


左側も同様に

  • 変更前:左向き矢印キーが押されなら

  • 変更後:左向き矢印キーが押された かつ しょうとつL = 0つまり左側に障害となるブロックがない場合だけ移動できるようにします。


キャットの動きを修正

左右のキーを押して、障害物に衝突したタイミングで、移動できなくなったOK。 想定外の動きをした場合は、センサーの位置を確認します。センサーより先にキャットのひげが当たっていたりすると、元の動きと同様になります。この場合はセンサーをもう少し外側にずらしましょう。


最後は幽霊の効果を100にして、両センサーを透明にしておきます。

「隠す」を使ってしまうと機能自体が止まってしまうので、センサーが働きませんよ。

幽霊の効果を100にして透明化

ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

Commentaires


bottom of page