- ベストアンサー
AS3:ルートの変数とムービークリップ内の変数について
- AS3:ルートの変数とムービークリップ内の変数について
- ルートの変数とムービークリップ内の変数の値の受け渡し方法について説明します。
- AS3の環境でルートからムービークリップ、ムービークリップからルートへ変数の値を渡すことはできますが、注意が必要です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
書かれていらっしゃる内容だと root の変数 RootVar に 3 が入ったかどうか全く検証できないではないですか。 書かれていらっしゃるものだと, root のその フレームが表示されたときに1回だけしか if 文は実行されませんよ。 3秒後に root の RootVar が 3 になる予定なんでしょう? それでしたら少なくとも 3秒後 以降に if(RootVar>=3){ … } の判定をする必要があります。 ムービークリップMC内のスクリプトでそれをしないのでしたら, root の方で変数 RootVar が 3 になったかどうかを監視し続けるような工夫をする必要があります。 例えば, ムービークリップMC内のスクリプトはそのままで, root のフレームには次のように書くなどです。 ------------------ // 変数 RootVar の宣言(型:0以上の整数) var RootVar:uint; // 関数 traceDekita を毎フレーム実行するイベントリスナーを定義 this.addEventListener(Event.ENTER_FRAME,traceDekita); // 関数 traceDekita の定義 function traceDekita(evt:Event):void { // もし 変数 RootVar の値が 3 以上であれば if (RootVar>=3) { // 「できた!!」 を出力 trace("できた!!"); // 関数 traceDekita を毎フレーム実行するイベントリスナーを削除 this.removeEventListener(Event.ENTER_FRAME,traceDekita); } } ------------------ また,次のような方法もあります↓。 ・root のフレーム ------------------ var RootVar:uint; // 関数 traceDekita の定義 function traceDekita():void { // もし 変数 RootVar の値が 3 以上であれば if (RootVar>=3) { // 「できた!!」 を出力 trace("できた!!"); } } ------------------ ・ムービークリップMC内のフレーム ------------------ MovieClip(root).RootVar=0; var AddTimer:Timer=new Timer(1000,3); AddTimer.addEventListener(TimerEvent.TIMER,AddNum); AddTimer.start(); function AddNum(eventObject:TimerEvent):void { MovieClip(root).RootVar++; //↓付け加え:root の 関数 traceDekita を実行 MovieClip(root).traceDekita(); } ------------------ 他にも方法は色々ありますが, とにかく,少なくとも 3秒後 以降に if 判定して何かの動作をさせる必要があります。 そうでないと検証できません。
お礼
そうかただ if(RootVar>=3){ trace("できた!!"); } とだけ書いていてもだめなんですね。常に監視しているものを設定するか、 3以上になったときに実行される処理を設定しないとif(..){...}は動かないんですね。 ありがとうございました。