一分間スクラッチ講座|スクロール処理⑤スプライトの幅を自動で取得する方法
スクロール処理でブロックを正しく表示・非表示する準備
前回までの記事では、スクロールに合わせてブロックを移動させたり、クローンで複数のブロックを作ったり、画面端に来たタイミングで表示・非表示を切り替える仕組みを作ってきました。
ただ、ここでひとつ問題があります。
ブロックの種類が増えてくると、ブロックごとに違う横幅を登録するのが大変、ということです。
同じ足場でも、長いブロック、短いブロック、見た目の違うブロックなどを使う場合、それぞれの幅を考えながら表示・非表示を管理する必要があります。
そこで今回は、スクラッチのスプライトの幅を、プログラムで自動的に取得する方法を作っていきます。
こちらは Youtube ショート動画、ファイブボックス一分間スクラッチ講座でまとめた内容です。
もしお時間がありましたら、ご一緒にご覧ください。
1. スプライトの幅をどうやって調べるか
まずは、スプライトの幅を取得する考え方です。
スクラッチのステージでは、x座標の右端はだいたい 240 付近です。
今回はこの仕組みを使います。
スプライトをいったん画面の中心、つまり
x座標:0 y座標:0
に配置します。

このとき、スプライトが画面の端に触れていない状態にしておきます。
そこから、スプライトを右方向へ少しずつ移動させます。

そして、スプライトが右端に触れるまで移動させます。

2. 右端に触れた位置から幅を計算する
スプライトが右端に触れたとき、スプライトの中心は画面の右端より少し左にあります。
たとえば、端に触れたときのx座標が 200 だったとします。
スクラッチの右端を 240 として考えると、240の時に1回だ「x座標を1ずつ変える」が動いてしまうので、この時のブロックの右端のx座標は 241 になります。
241 - x座標
で、スプライトの半分の幅を求めることができます。
今回の例なら、
241 - 200 = 41この 41 が、スプライトの中心から右端までの長さです。
つまり、スプライトの半分の幅です。
スプライト全体の幅にするには、これを2倍します。
(241 - x座標) × 2これで、スプライトの幅を求めることができます。
3. 幅を取得する専用ブロックを作る
この処理は、コスチュームごとに何度も実行します。
普通に実行すると、スプライトが画面上を動いている様子が見えてしまいます。
そこで、ブロック定義を使います。
「ブロックを作る」から、たとえば「はば取得」という名前のブロックを作ります。

このとき、必ず「画面を再描画せずに実行する」にチェックを入れておきます。
これにチェックを入れることで、処理を高速に実行でき、画面上でスプライトが移動しているように見えなくなります。
4. リスト「はば」を準備する
取得した幅は、あとでクローンを作るときに使いたいので、リストに保存しておきます。
今回は「はば」というリストを作ります。

このリストには、各コスチュームの幅を順番に入れていきます。
たとえば、
1番目のコスチュームの幅
2番目のコスチュームの幅
3番目のコスチュームの幅というように、コスチューム番号とリストの番号が対応する形にしておきます。
5. ブロック定義の中身
作成する「はば取得」ブロックの流れは、次のようになります。
リスト「はば」の中身をすべて削除します。
→前に取得した幅が残っていると、データが重複してしまう。コスチュームを1番目にします。
以下の処理をくり返します。
a, x座標とy座標を0にする
b, 端に触れるまで、x座標を1ずつ変える
c, (241 - x座標) × 2 をリスト「はば」に追加する
d, 次のコスチュームにする
e, 1番目のコスチュームに戻ったら処理を止める
このようにすると、すべてのコスチュームの幅を順番に取得できます。

6. クローンを作る前に呼び出す
作成した「はば取得」ブロックは、クローンを作る前に呼び出します。
流れとしては、次のようになります。
緑の旗が押されたとき
隠す
はば取得
クローンを作る
クローンを作る
クローンを作る先に幅を取得しておくことで、クローンを作ったあとに、それぞれのブロックが自分の幅を使って表示・非表示の判定を行えるようになります。

7. 今回のポイント
今回は、スプライトの幅を自動で取得する仕組みを作りました。
ポイントは次の3つです。
端に触れるまで移動して、x座標を調べる
(241 - x座標) × 2 で幅を求める
取得した幅をリストに保存するこの仕組みを使うと、ブロックの種類が増えても、ひとつひとつ幅を手入力する必要がなくなります。
スクロールゲームでは、足場やブロックの種類が増えていくことが多いので、自動で幅を取得できるようにしておくと、あとから管理がとても楽になります。
次回は、このリストに保存した幅を使って、クローンごとの表示・非表示をより正確に管理していきます。
ファイブボックス一分間スクラッチ講座 の記事はこちらでまとめてあります。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!