提供: Japanese Scratch-Wiki

(ひらがなヘッダの追加 (Bot))
(ブロック名の変更 (bot))
 
(同じ利用者による、間の1版が非表示)
19行目: 19行目:
  
 
<scratchblocks>
 
<scratchblocks>
@ がクリックされたとき
+
@greenFlag が押されたとき::events hat
 
[ボタン番号 v] を [0] にする
 
[ボタン番号 v] を [0] にする
 
(3) 回繰り返す  //  必要なクローン数を指定する
 
(3) 回繰り返す  //  必要なクローン数を指定する
100行目: 100行目:
  
 
<scratchblocks>
 
<scratchblocks>
@ がクリックされたとき
+
@greenFlag が押されたとき::events hat
 
[クローンの総数 v] を [0] にする
 
[クローンの総数 v] を [0] にする
 
(すべて v) 番目を [X座標リスト v] から削除する
 
(すべて v) 番目を [X座標リスト v] から削除する

2019年1月28日 (月) 14:12時点における最新版

このきじは ひらがなのページがありません。ごめんなさい。編集者向け:作成する
クローンを活用すると、たった1つのスプライト で、複数のスプライトを用意したような効果が得られる。各クローンでは個別に値をもつことができるが、このような値を他のスプライトやクローンで利用するには、工夫が必要になる。

クローンでの情報の扱い

クローンを利用する場合、それぞれのクローンごとに異なる情報 (たとえば、HP (ヒットポイント) や、X座標Y座標など) を扱いたいことがある。ここでは、このような情報を別のクローンやスプライトから読み書きしたい場合 (パブリックな情報とする場合)と、そうでない場合 (プライベートな情報にする場合)の2種類にわけて、それぞれのスクリプトの作り方と利用法を紹介する。

クローン内のみで利用する情報

そのクローンでしか利用しない情報を扱うときは、ほかのクローンと情報を共有するしくみが不要なので、比較的シンプルに実現できる。

プライベート変数を利用する

クローンで利用する変数を作成するときに「このスプライトのみ」をチェックしておくと、この変数はクローンごとに別のものとして扱われるため、クローンの外からこの変数の値を読み書きすることができない (このような変数をプライベート変数という)。 これを利用してクローンごとに異なるID番号をつけておくと、それぞれのクローンに別の動作を指定できる。

準備

まず、次の変数を用意する:

  • クローンのIDとなる変数 (「このスプライトのみ」をチェック)。この例では「ボタン番号」

スクリプト例

まず、次のスクリプトをクローンの作成元となるスプライトに作成する。

@greenFlag が押されたとき::events hat
[ボタン番号 v] を [0] にする
(3) 回繰り返す  //  必要なクローン数を指定する
  [ボタン番号 v] を (1) ずつ変える
  [自分自身 v] のクローンを作る
end


次に、個々のボタンなどで実行するスクリプトを作成する。

クローンされたとき
もし <(ボタン番号) = [1]> なら // 1つめのクローンで実行する内容
end
もし <(ボタン番号) = [2]> なら // 2つめのクローンで実行する内容
end
もし <(ボタン番号) = [3]> なら // 3つめのクローンで実行する内容。4つめ以降も同様に
end

すべてのクローンでただちに実行すべき処理があるときは、「もし〜なら」ブロックの前に追加しても良いが、もう1つ「クローンされたとき」ブロックを追加して、そこにそれらの内容を記述したほうがわかりやすいだろう。

クローンを種類ごとに分けて処理する

ID番号ではなく、クローンの種類ごとに動作を変えることもできる。

準備

この例では、次の変数を使用する。

  • 弾丸の種類:クローンされた弾丸が、プレイヤーが発射したものか、敵が発射したものかを表す変数
  • 発射Xと発射Y:弾丸の発射場所を表す変数
  • 弾の向き:弾の向かう方向を表す変数

スクリプト例

「スペースキーが押されたとき」にミサイルを発射する場合、次のスクリプトを記述する:

[スペース v] キーが押されたとき //  必要に応じて変更する
[弾の種類 v] を [正義の弾丸] にする
[発射X v] を (x座標) にする
[発射Y v] を (y座標) にする
[弾の向き v] を (向き) にする
[弾丸 v] のクローンを作る //  クローンの元となるスプライトを指定

そして、弾丸スプライトに次のスクリプトを追加する。

クローンされたとき
x座標を (発射X) 、y座標を (発射Y) にする
(弾の向き) 度に向ける
もし <(弾の種類) = [正義の弾丸]> なら 
  コスチュームを [正義の弾丸 v] にする
  <<[端 v] に触れた> または <[敵 v] に触れた>> まで繰り返す 
    (10) 歩動かす
  end
end
もし <(弾の種類) = [悪の攻撃]> なら 
  コスチュームを [悪の攻撃 v] にする
  <<[端 v] に触れた> または <[プレイヤー v] に触れた>> まで繰り返す 
    (10) 歩動かす
  end
end

他のスプライトやクローンから情報を読み書きする

次に、クローンごとに独自の情報を持ちながら、他のスプライトやクローンからそれらの情報を読み書きできるようにする。このためには、情報をリストに格納してクローンのIDによって管理すればよい

準備

この例では、次のような変数とリストを使用する。

  • クローンの総数:クローン全体の数を管理する変数。カウンターとして使用される。
  • クローンID:クローンを特定するための識別情報を入れるプライベート変数(「このスプライトのみ」をチェック)。
  • X座標リスト、Y座標リスト:クローンの情報 (プロパティ) を外部と共有するためのリスト。この例では、各クローンの座標情報をこれらで管理する。

スクリプト例

次のスクリプトをクローン元のスプライトに追加する。

@greenFlag が押されたとき::events hat
[クローンの総数 v] を [0] にする
(すべて v) 番目を [X座標リスト v] から削除する
(すべて v) 番目を [Y座標リスト v] から削除する
(10) 回繰り返す  //  作成するクローンの総数に変更する
  [] を [X座標リスト v] に追加する
  [] を [Y座標リスト v] に追加する
  [クローンの総数 v] を (1) ずつ変える
  [自分自身 v] のクローンを作る
end

各クローンでの処理を、次のように指定する。


クローンされたとき
[クローンID v] を (クローンの総数) にする
ずっと 
  (クローンID) 番目( [X座標リスト v] )を (x座標) で置き換える
  (クローンID) 番目( [Y座標リスト v] )を (y座標) で置き換える
end


ここで説明した方法を組み合わせて、クローンの種類ごとに処理をわけながら、さらに情報を別のスプライトやクローンと共有させることも可能である。

応用例

ここで紹介したテクニックは、次のような場面で活用できる:

  • 1つのスプライトから、複数のボタンを生成する
  • 1つのスプライトから、さまざまな種類の、大量の敵を発生させる
  • 複雑な (または、多少簡略化した) パーティクル効果
  • 1つのスプライトで、雲、爆発などさまざまな効果を発生させる
  • タワーディフェンスゲームで、数多くの建物をマップに建築する
  • 弾丸を表すスプライトを1つ作って、銃を発射するすべてのキャラクターの弾丸をそこから作成する。

関連項目