前々回はイベントの中にスクリプトを書き、変数を扱った。
paraflaでは、通常のイベント(以後親イベントと呼ぶ)の他に、スプライトの中にもイベントが書ける。従って、スプライトの中にも普通にスクリプトを書き、変数を使う事が出来る。
しかし、親イベントの中の変数と、スプライトの中の変数は、名前が同じであっても別のものである。
これまでは、「ここ」にある変数しか操作しなかったので、「どこ」にあるかは気にする必要はなかった。
しかし、変数や色々なものは、それが「どこ」にあるものなのかを把握する必要がある。
その「住所」にあたる部分をターゲットと呼ぶ。
と難しく前置きしても、paraflaの場合、親イベントかスプライトかくらいの「住所(ターゲット)」しかない。
ターゲット地図
親イベントでsprite1,sprite2を作成。
sprite1の中でsprite3を作成…といった意味である。
親イベントには、_root という特別な名前がついている。
アンダーバーを忘れないこと。
スプライトの場合は、自分でつけたスプライトの名前(インスタンス名…詳しくは後述)が、そのまま「住所(ターゲット)」に使われる。
実際の記述では、例えば「変数nagisa」に0を入れる場合は以下のようになる。
区切りとして、ピリオド
nagisa = 0;// 普通の記述。「ここ」にある場合はそのまま書いてよい this.nagisa = 0;// 上の丁寧な書き方。「this」は、「ここ」という意味である。 _root.nagisa = 0;// 親イベントにあるnagisa _root.sprite1.nagisa = 0;// 「親イベント→sprite1」にあるnagisa _root.sprite1.sprite3.nagisa = 0;// 「親イベント→sprite1→sprite3」にあるnagisaを使う。
スプライトの「住所(ターゲット)」は、このように親イベントからどういう順番で生まれてきたかを、全部書かなければならない。
この地図の例だと、sprite4はsprite2から生まれているので、
_root.sprite1.sprite4 という記述は有り得ない、という事になる。
また、「住所(ターゲット).何かしらの名前」
という書き方になるが、どの部分までがターゲットなのかは明確にしておく必要がある。
_root.sprite1.sprite3.hensu = 0; _root.sprite1.sprite3 = 0; _root.hensu = 0; // 赤い部分がターゲットになる
最後のピリオドから左側がターゲットになる
という事である。この判断の仕方はそのうち重要になる。
また、ターゲットの記述は変数など、別の書き方では書けない。
_root.sprite1.hensu = 0; // 正しい書き方 "_root".sprite1.hensu = 0; // 文字列として書く事はできない target = "_root"; target.sprite1.hensu = 0; // 変数から置きかえるのも駄目
これをどうにかするのが、evalという命令である。
eval (
文字列をターゲットに置きかえる命令使い方: eval(文字列)
説明:
通常、ターゲットには通常の書き方以外が出来ないが、evalは、指定した文字列をターゲット用の文字列に置き換える。
のように使う。
eval("_root." + "sprite1").hensu = 0;
ただし、1つのevalで、ターゲット部分全てに置き換えなければならない。
という書き方は出来ない。ターゲット部分全てがevalに入っていないからである。
eval("_root.sprite1").sprite3.hensu
また、は特殊な書き方で、今いる場所のターゲットが入る。
eval("this")
今いる場所のターゲットが「_root.sprite1」であれば、
が成り立つことになる。「_root.sprite1」は文字列ではない事に注意。
eval("this") == _root.sprite1
UPPER TIPS
ターゲット相対指定を使えば
多少は便利になるが、割愛する。
その変数をどこで作り、どこで操作しているかは、正しく把握しておく必要がある。
では、スプライトそのものの住所はどこだろうか?
「spriteの中で変数を作ったので、その変数の住所はspriteである」のと同様に、
「_rootの中でスプライト(sprite)を造ったので、このスプライトの住所は_rootである」
が正解になる。
スプライトの住所がスプライト自身、ということはない。
実際に書いてみると、「sprite1の住所がsprite1」は、
となってしまうので、これは何かおかしいという事に気付くかもしれない。
_root.sprite1.sprite1
次は、3つのASの2つめ、ボタンアクションである。