【scratch】シミュレーションゲームの例「クローンからクローンを出す」 前編
概要
とある子がシミュレーションゲームのようにクローンされたキャラクターから玉を発射したいという質問があったのですが、少し工夫して作る必要があるのででメモを書いておきます。やり方はいくつかあるのでここでは前編後編に分けて、使用する機能別に5パターンを紹介したいと思います。
その1.キャラクターはクローンを使わない(初心者向け)
キャラクターはクローンではないため、ボールスプライトは「●●へ行く」ブロックを使えば簡単に作ることができます。サンプルプロジェクトでは変数の変更をトリガーにして玉を発射しています。

:キャラクターのスプライト

:ボールのスプライト
サンプルプロジェクト(「CLICK」ボタンをクリックするとキャラクターが出撃してくれます):
https://scratch.mit.edu/projects/222647848/
しかし、いっそのこと下記のプロジェクトのようにボールスプライトもキャラクターごとに分けたほうがわかりやすいかもしれません(変数も使わなくて済みます)。
https://scratch.mit.edu/projects/224288684/
その2.ボールとキャラクターもクローンとして使う(おすすめ)
その1では出撃するキャラクターの数だけスプライトやメッセージを組まないといけないので大量に出したいときや複数のキャラクターを作るときは大変です。そこでキャラクターもクローンにする方法です。サンプルプロジェクトではキャラクローンは発射するときにx座標とy座標を変数に格納しておくことでボールスプライトはその座標でクローンを作成してくれます。

:キャラクターのスプライト

:ボールのスプライト

:出撃ボタンのスプライト
サンプルプロジェクト:
https://scratch.mit.edu/projects/223380946/
その3.発射待ちをする(おすすめ)
おそらく、その2ではキャラクターが複数体いると玉を発射しないキャラクターが出てくるかもしれません。それは発射のタイミングが被ることがあるからです。どういうことかというと、キャラクローンの一体が発射座標の変数を変更した後、ボールスクリプトがその変数からクローンを作成する前に、別のキャラクローンが変数を上書きしてしまうので、最初のキャラクローンから玉が発射しなくなってしまいます。サンプルプロジェクトではキャラクローン同士の発射座標の変数の上書きを阻止するために、変更可能になるまで別のキャラクローンの変数への書き込みを待つようにしています。この方法なら、キャラクローンを数体出撃する場合は玉の発射しないキャラクローンは出てこないと思います。

:キャラクターのスプライト
サンプルプロジェクト: