- ベストアンサー
【ActionScript】ムービークリップ間の変数の受け渡しのやり方は?
ムービークリップ間の変数の受け渡しがいまいちわかりません。 例えば、 ・_root.mc1 及び、 ・_root.mc1.mc2 というインスタンスがあった場合、 _root.mc1.mc2 のフレームに a = 100; と書き、 _root.mc1 のフレームに trace(_root.mc1.mc2.a); と書いても「undifined」と出るだけです。 (上層の値を下層で受けることはできるんですが、この例のように下層→上層の受け渡しはできないのです。) どうすればインスタンス間の変数の受け渡しができるのでしょうか。 よろしくお願いいたします。
- ikataro
- お礼率79% (298/375)
- Flash
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
解決は難しい問題ですが, 理由は簡単です。 まず mc1 がロード(表示)されて, trace(_root.mc1.mc2.a); が実行され, 次に mc2 がロード(表示)されて, a = 100; が実行されるからです。 a が未定義のときに trace しても,未定義なので undifined です。 つまり,mc2 のフレーム1に trace(_root.mc1.mc2.a); a = 100; と書いているようなものです。 mc1 のフレームを2フレームにして, そのフレーム2に this.stop(); trace(_root.mc1.mc2.a); mc2 のフレーム1に a = 100; と書くと, まず mc1 がロード(表示)されて, 次に mc2 がロード(表示)されて, a = 100; が実行され mc1がフレーム2に進み trace(_root.mc1.mc2.a); が実行されます。 a = 100; という定義後に trace が実行されるので 100 が表示されます。 どんな場合でもそうとは限りませんし, どんな場合でも使える方法ではないので,完全な解決は難しいですが, 一応理由としてはそういうことです。 タイミングの問題です。
関連するQ&A
- ムービークリップ内の変数について
ムービークリップ内で扱った変数をルートで取り扱う時は _root.ムービークリップインスタンス名.変数名 このような形で取り扱うのでしょうか?。 また、ルートの1フレーム目のフレームアクションで変数を定義していた場合は、単に変数名だけで取り扱えるのでしょうか?。 宜しくお願い致します。
- ベストアンサー
- Flash
- AS3:ルートの変数とムービークリップ内の変数について
AS3:ルートの変数とムービークリップ内の変数について ルートのタイムラインで設定した変数var RootVarがあるとして、これをあるムービークリップMCからMovieClip(root).RootVarで読み取って、MC内で何か処理をしたときMovieClip(root).RootVar++;とやってもルートのRootVarの値は変わりません。 例えば、 ■ルートのタイムライン1フレームに記述 var RootVar:uint; if(RootVar>=3){ trace("できた!!"); } ■ステージにあるムービークリップMCのタイムライン1フレームに記述 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++; } ルートからムービークリップ、ムービークリップからルートへ変数に値を渡したり受け取ったりはできなのでしょうか? 変数の扱い方が問題なのでしょうか?よろしくお願いします。 環境:AS3、Flash CS4
- ベストアンサー
- Flash
- FLASHでムービークリップ名を変数で持つ場合のloadmovie
FLASHMXで空ムービークリップを作成して その中に外部SWFを読み込むスクリプトを書いています。 外部ファイルはa0.swfからa10.swfまであるのでそれを全て読み込む為に 空ムービークリップ名を変数で持ちたいのですが loadmvieの行では変数と認識してくれないようで何も表示されません。 (traceの行の2つの変数は正常に表示されますし 直接ムービークリップ名を入れれば読込もできます) おそらく下のソースの例だとpart_mcは変数名なのに そのままムービークリップ名と捕らえられてしまっているようです。 どのようにすれば変数と認識してくれるのでしょう? for (var i = 0; i<10; i++) { var part_mc = "a10" + i + "_mc"; var loadfile = "a" + i + ".swf"; _root.createEmptyMovieClip(part_mc, 100+i); _root.part_mc.loadMovie(loadfile); _root.part_mc._x = i * 10; trace(loadfile); trace(part_mc); } アドバイスをお願いします。
- ベストアンサー
- グラフィックソフト
- ムービークリップのインスタンス名を変数で扱う
Flash初心者で、レベルの低い質問だとは思いますが申し訳ありません。単純なシンタックスに関する質問です。 Panel.Panel0Cont ~ Panel.Panel10Cont という11個のムービークリップがあります。 それぞれのムービークリップを一挙に指定のフレームへgotoAndPlayさせる際に、ムービークリップの名前を変数で代入してforループで回したいのですが、変数への代入の仕方が解りません。例えば、 for (i=0; i>10; i++) { var mc:MovieClip = "Panel.Panel"+i+"Cont"; mc.gotoAndPlay(JumpNum); } mcはムービークリップですから、単純な文字列を代入しても当然タイプエラーになってしまいます。ムービークリップのインスタンス名のプロパティに、文字列を変数を使って代入するやり方があるのだと思います。 そのやり方をご教示頂けませんか。 ※参考書を2冊ひっくりかえしてもにわかには見つかりませんでした。
- ベストアンサー
- Flash
- ムービークリップの制御について
スクリプト初心者です。 ムービークリップの制御について、まったくわからず困っています (1)シーン1、5フレーム目にムービークリップ、インスタンス名a_mc配置 (2)a_mcの中にb_mc配置。b_mcをクリックすると→a_mcの1フレーム目に移動。もう1度b_mcクリックすると→a_mcの10フレーム目に移動。もう1度b_mcをクリックすると→a_mcの1フレーム目に移動・・・と、 b_mcをクリックするごとにa_mcの1フレーム目、10フレーム目、1フレーム目・・繰り返す制御をしたいのですが。。 どなたか分かる方いましたら 教えてください!!
- 締切済み
- Flash
- actionscript 2.0 配列型変数をグローバル変数として扱いたい。
action script2.0で ある変数を、共有しようと、ムービークリップに _global.hoge = _name(ムービーのインスタンス名); というような記述をしました。 すると、たしかにほかのどのムービークリップでも hogeという値は取り出すことができました。 ところが、インスタンスはひとつではなく複数あるため、 _global.hoge = _nameが記述されているムービークリップがいくつもあると、 次々上書きされ、結局hogeは、最後に読み込んだ _nameの値が入ってしまうという現象が起きたのです。 そこで _global.hoge[_name] = _name; というような、変数名がかぶらぬよう配列に変更してみました。 ところが、また問題が発生しました。 なぜか、配列だと頭に_globalとついていても グローバル変数として扱ってくれず、 ほかの場所で hoge[1] 等と記述しても全く値が取り出せないのです。 また、同ムービークリップ内ではちゃんと取り出せました。 どうすれば、配列変数をグローバル変数として 扱うことができるのでしょうか? よろしくお願いします。
- ベストアンサー
- Flash
- ムービークリップ内のボタン
フラッシュ初心者です。 アクションスクリプトがうまく動かず困っています。 シーン1にムービークリップ1(インスタンス名:mc1)とムービークリップ2(インスタンス名:mc2)が置いてあります。 mc2の中にはボタンAを配置してあり、ボタンAをクリックすると、mc1のフレームラベル(B)に飛ぶような制御をしたいです。 ボタンAに記述してあるスクリプトは以下です。 on (release) { this._parent.mc1.gotoAndplay("B"); } しかしクリックしても全く動きません。 絶対パスで指定してもダメでした。 ちなみに、ためしに、mc1ではなく、シーン1上のフレームラベルに 飛ばすように記述したら普通に動きました。。 何か記述間違いがあるのでしょうか? 分かる方がいましたら教えてください。 お願いします。
- 締切済み
- Flash
- 変数が渡らない
選択するための3つのボタンを作成し、それぞれ変数ansに値を格納しました。下記がそのActionScriptの例です。 ------------------------------- on(release){ ans=1; _root.nextFrame(); } ------------------------------- ボタンを押した後、別のレイヤーのフレームからMCを読み込みます。 しかし、ボタン内で格納した変数が読み込まれずundefined(未定義)となってしまいます。if文で分岐したいのですが出来ずに困っています。 ボタンをクリックすることで変数に格納した値を、ムービークリップのイベント内で読み込むことは可能でしょうか?
- ベストアンサー
- Flash
- ムービークリップとインスタンス
「ライブラリ内にあるのがムービークリップで、それをステージに配置したものがインスタンスである。」このように理解しているのですが、これは間違いでしょうか? 1、「MCを一つ作成し、それをステージ上に3カ所に配置し、各"MC"に01、02,03とインスタンス名を付けた。」 2、「MCを一つ作成し、それをステージ上に3カ所に配置し、各"インスタンス"に01、02,03とインスタンス名を付けた。」 上記の場合どちらが正しいのでしょうか? ムービークリップとインスタンスについてご教授ください。 よろしくお願いします。
- ベストアンサー
- Flash
- ActionScript - 複数の空ムービークリップ
複数の空ムービークリップを作成してその中に 画像を埋め込みたいのですがうまくいきません。 for(var i=1;i<10;i++){ //空ムービークリップ作成 _root.createEmptyMovieClip("mc"+i,0); var load_mc = "_root.mc" + i; var jpg = i + ".jpg"; //画像の読み込み load_mc.loadMovie(jpg); } の様に行っているのですが エラーは起こりませんがうまくいきません。 ↑プラス横一列に並べる方法もよかったら お教え願います。よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
なるほど。やはり順番が問題ですか・・ プログラムは同じ場所に書くようにします。 どうもありがとうございました。