2018年2月13日火曜日

Scratchでプログラミング その10 背景を作ろう その2(クローンを使ってみる)

Scratchの使い方解説です、今回の難易度はNormal
ここまでに比べると少し難しい話になります。
今回はScratch独特のクローンという機能を使用してみます。
記事をまとめたページはこちら。

前回の記事で背景の表現方法として、動かない背景を作成しました。
今回はスクロールする背景です。

昔の2Dのシューティングゲームをイメージすればわかりやすいかと思います。
飛行機が画面上を飛んでいたら、右側から敵が着たり背景が変わったり・・・

今回はそんな背景をイメージして、背景として木が画面右からスクロールしてくるようにしてみます。


0.目次


  1. 木のスプライトを追加
  2. 木を右から左へ移動させる
  3. クローンを使う
  4. 木を繰り返し表示する
  5. 「隠す」と「クローンの削除」の違い


1.木のスプライトを追加

前回の背景追加と同様に、「新しいスプライト」から木のイラストを1つだけ配置します。

太陽は今回動かさないので、なくてもOKです。背景が寂しかったので入れました。

木を追加後は、画面左下側に表示されているイラストの一覧から木をクリックしてください。
上の写真のように、木が青枠で表示されていればOKです。


木をクリックすると、画面右側のコマンド一覧が表示されなくなります。
今までのコマンドはネコを動かすためのコマンドでした。

今は木をクリックしたので木を動かすコマンドを入力できる状態になっています。


2.木を右から左へ移動させる

次に木を右端からだんだんと左側へと移動させます。

その2 ネコを地面に移動する
その3 ネコを左右に移動させる
で紹介したものの応用です。

まずは、画面の右端(x座標を240)に移動して、
そのあと、座標を少しずつ左へ移動します。


これを実行すると、木は右から左へ進んでいって、左端で止まってしまいます
移動した木は邪魔なので消したいです。

ここで画面の右上を見ると、半透明な木が表示されています。


この半透明な木の下には、現在の座標が表示されているようです。
どうやら木はx座標が-247まで移動したあとに止まっているようです。


左端へ移動した木を消すために、コマンドを追加しました。
「x座標を-5ずつ変える」の後ろに制御の「もし~なら」を追加して、条件を指定しています。


まず、演算の「□=□」動きの「x座標」をくっつけます。
演算の片側には木が移動したx座標の「-240」を設定します。


その後に制御の「もし~なら」に作成したブロックを入れます。


制御の「もし~なら」の中には見た目の「隠す」を入れます。
また、繰り返し実行できるよう見た目の「表示」を追加しています。


これで左端まで移動した木が自動的に隠れるようになりました。


3.クローンを使う

ここからが今回の難しいトコ、クローンの利用をしてみます。
背景の木は一回表示してオシマイでは寂しいですよね。

  • なんども右から左へ表示したい
  • 1本だけじゃなくて何本も表示したい

背景の木だけじゃなく、シューティングゲームやアクションゲームの敵キャラに当てはまる動きかと思います。
こんなときにはクローンを使います。
クローンは画面内に同じイラストを表示させる機能です。

さきほど作成したコマンドを下のように変更します。


これまではイベントの「旗がクリックされたとき」からの一連の動作を作成しましたが、
制御の「クローンされたとき」を使います。

「クローンされたとき」の下に、ここまでに作成したコマンドの「表示する」より下の部分を移動します。


移動したコマンドの中の「隠す」制御の「クローンを削除する」に変更します。
コマンドがなくなった「旗がクリックされたとき」には「隠す」制御の「自分自身のクローンを作る」を追加します。

これで実行しても先ほどと見た目は変わらないと思います。



4.木を繰り返し表示する

折角クローンにしたので木を何度も表示してみます。
最後に「旗がクリックされたとき」のほうを少し修正します。


制御の「自分自身のクローンを作る」の前か後ろに制御の「1秒待つ」を追加します。
そして制御の「ずっと」で囲みます。

これで旗をクリックすると木が1秒ごとに表示されます。



いま、木のイラストは1つしか用意してません。
素直に木をたくさん用意すると大変ですね。

そんなときに、このようにクローンを使うことで
同じ動きをするイラストを簡単に増やすことが出来ます。



5.「隠す」と「クローンの削除」の違い

僕はScracthに精通しているわけではないので、一般的なプログラムの観点で書いています。
今回「クローンされたとき」へ移動させたコマンドのなかの「隠す」「クローンを削除する」に変更しました。
見た目はどちらでも変わらないのですが、内部的には意味が違っています。

「隠す」の場合、Scratchの画面は左端へ移動した木のクローンをずっと隠し持っています。
1秒ごとに木のクローンを作成しているので、たくさんの木を隠し持っているとプログラムがイッパイイッパイになってしまいます。
一般のプログラムでは「メモリを無駄に使っている」とか「なんだか長く使っていると動きが遅くなる」とうい状態になっています。

なので、木を再利用する必要がない場合は「クローンを削除する」を利用してキレイにあげてください。