(BACK)

5時限目.ターゲット

前々回はイベントの中にスクリプトを書き、変数を扱った。
paraflaでは、通常のイベント(以後親イベントと呼ぶ)の他に、スプライトの中にもイベントが書ける。従って、スプライトの中にも普通にスクリプトを書き、変数を使う事が出来る。

しかし、親イベントの中の変数と、スプライトの中の変数は、名前が同じであっても別のものである。

これまでは、「ここ」にある変数しか操作しなかったので、「どこ」にあるかは気にする必要はなかった。
しかし、変数や色々なものは、それが「どこ」にあるものなのかを把握する必要がある。
その「住所」にあたる部分をターゲットと呼ぶ。

5−1.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("_root.sprite1").sprite3.hensu
という書き方は出来ない。ターゲット部分全てがevalに入っていないからである。


また、
eval("this") 
は特殊な書き方で、今いる場所のターゲットが入る。
今いる場所のターゲットが「_root.sprite1」であれば、
eval("this") == _root.sprite1
が成り立つことになる。「_root.sprite1」は文字列ではない事に注意。

UPPER TIPS
ターゲット相対指定を使えば
多少は便利になるが、割愛する。

その変数をどこで作り、どこで操作しているかは、正しく把握しておく必要がある。



では、スプライトそのものの住所はどこだろうか?

「spriteの中で変数を作ったので、その変数の住所はspriteである」のと同様に、
「_rootの中でスプライト(sprite)を造ったので、このスプライトの住所は_rootである」
が正解になる。
スプライトの住所がスプライト自身、ということはない。

実際に書いてみると、「sprite1の住所がsprite1」は、
_root.sprite1.sprite1
となってしまうので、これは何かおかしいという事に気付くかもしれない。

次は、3つのASの2つめ、ボタンアクションである。

(次の講義へ)

(BACK)