このブログテーマでは、スクラッチの初心者から上級者まで、ちょっとお役に立つ情報を不定期で紹介していきます。
作成済みのプロジェクトでは、複数のブロックをクローンで作成し、任意の初期位置に配置、スクロールで左右に移動する仕組みを作成しています。最初から作りたい場合は、下記の記事をご参照ください。
スクロールの作成 第1弾 相対的な移動を作成する方法
スクロールの作成 第2弾 超簡単 天井跳ね返りの修正
スクロールの作成 第3弾 クローン機能でスクロールで移動する足場を複数作成
スクロールの作成 第4弾 クローンで作成されたブロックの表示、非表示コントロール
ここまでの作品で、複数のクローンがそれぞれの表示非表示されるべき境界線で表示されたり、隠れたりする仕組みができました。ただコスチュームが多くなった時、それぞれのコスチューム幅をリストに登録するのは面倒ですよね。
今回は、それぞれのコスチューム幅を自動で取得する方法をご紹介いたします。
今回の完成作品を共有しますので、イメージがつかめない場合は以下をご参照ください。
下の動画は不定期配信の「ファイブボックス 一分間スクラッチ講座」です。ご興味のある方は併せてご参照ください。
スプライトの幅の取り方
まず、スプライトの幅の取り方の考え方ですが、下の図をベースにフローを説明します。
- スプライトを画面中心(x=0,y=0)に配置、この時スプライトが画面端に触れていないのが条件です。
- 右端に触れるまでx座標を1ずつ移動させます。
- 241-x座標(下図の?部分)がスプライトの幅の半分になります。
- その値を2倍にすればスプライトの幅になります。
ブロック定義で幅を取得
上で確認したフローは、コスチュームの数だけ実行します。超高速で実行するために、ブロック定義の「画面を再描画せずに実行する」にチェックを入れてブロックを作ります。
ブロック名は「はば取得」など、なんでも結構です。
ブロック定義内での処理は以下のようになります。
- リスト:はば の要素を全て削除
- 1番目のコスチュームを選択
- ずっと以下の処理を実行(コスチュームの数だけ、コスチューム数は変動)
- 座標をx、yともに0に指定
- 端に付くまでx座標をずつ移動
- スプライト幅(241-x座標)×2 をリスト:はば に追加
- コスチュームを次のコスチュームに更新
- もしコスチュームが1番目に戻っていたら処理中断
作成したブロック定義は、クローンを作成する直前に呼び出します。
はい、これでブロックが何種類もあった時で、自動で幅を取得することができます。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。