• ベストアンサー

MovieClip(root)について

ActionScript3.0で、ルートタイムラインにある変数の代入処理を、他の階層(ムービークリップなど)から命令する場合、 私は MovieClip(root).hoge = MovieClip(root).fuga; と書きますが、 MovieClip(root)を1回しか書かずに済ませる書き方は、ありませんでしょうか? ※その都度書くのは、あまり効率が良くないと思ったので。  たとえば、FlashLite1.1では、  tellTarget("/"){   hoge = fuga;  }  と書けて、効率が良いのですが、、、 よろしくお願いします。

  • Flash
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

前置きとして, root の階層には変数「fuga」とその「fugaの値」がすでに与えられている(定義されている)ものとします。 その場合, 普通は次のように書きます。 //---------------------------------------- var my_mc:MovieClip = MovieClip(root); my_mc.hoge = my_mc.fuga; //---↓検証してみるとするなら↓--- trace(my_mc.hoge); trace("↑↓同じでしょう?") trace(MovieClip(root).hoge); //---------------------------------------- もし仮に root の階層には変数「hoge」とその「hogeの値」までもが すでに与えられている(定義されている)場合に限っては with も使えますが...(使えますがあまり推奨されていませんよ。)。 //---------------------------------------- var my_mc:MovieClip = MovieClip(root); my_mc.hoge = 0; with(my_mc){ hoge = fuga; } //---↓検証してみるとするなら↓--- trace(my_mc.hoge); trace("↑↓同じでしょう?") trace(MovieClip(root).hoge); //----------------------------------------

hiyodoribana
質問者

お礼

回答ありがとうございます^^ 大変参考になります。 MovieClip(root)と書くことで、 プロパティrootを、MovieClip型に型変換している、 と、私は理解しております。 MovieClip(root).hoge = MovieClip(root).fuga; と書かずに、 var my_mc:MovieClip = MovieClip(root); my_mc.hoge = my_mc.fuga; と書くのは、 繰り返し、rootをMovieClip型に型変換するのは 効率が悪いから、でしょうか? また、withを使った書き方があり、 なおかつ非推奨なんですね。 今まで疑問に思っていた部分が、スッキリしました。 ありがとうございます。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 #1の お礼 より引用 > MovieClip(root).hoge = MovieClip(root).fuga; > と書かずに、 > > var my_mc:MovieClip = MovieClip(root); > my_mc.hoge = my_mc.fuga; > と書くのは、 > 繰り返し、rootをMovieClip型に型変換するのは > 効率が悪いから、でしょうか? むむむむ??? それは確かにその通りです。 書かれている通りで効率が悪いからですが, それ以前の問題で, ご質問に > MovieClip(root)を1回しか書かずに > 済ませる書き方は、ありませんでしょうか? と書かれているのでしょう? ですから その "1回しか書かず" の例を示しているわけです。 効率が良い悪いよりもっと前段階(最低条件)の話でそう書いているのです。

hiyodoribana
質問者

お礼

>> MovieClip(root)を1回しか書かずに >> 済ませる書き方は、ありませんでしょうか? >と書かれているのでしょう? >ですから その "1回しか書かず" の例を示しているわけです。 たしかに、私が、そうお願いしていました。 失礼しました^^; 大変勉強になりました。 ありがとうございます。

関連するQ&A

  • MovieClip間で、変数の受け渡し。

    最近、FlashMXを初めまして、ActionScriptを利用してのゲーム作りにチャレンジしています。 duplicateMovieClip関数を使って、MovieClipを複製し、なおかつそれぞれに変数を渡し、その変数によってMovieClipの反応を変える。 という流れの処理を作ろうとしました。 が、それぞれのMovieClipに変数を受け渡すところで、詰まってしまいました。 MovieClip間で変数をやり取りするには、どうしたら良いでしょうか? 誰か教えてください。お願いします。 参考にならないかもしれませんが一応、問題部分のソースを載せます。 var i = _root.ItemList.length + 1; while (--i) {   root.ItemNum++;   var s = "Items"+_root.ItemNum;   duplicateMovieClip(Items,s,_root.ItemNum);   setProperty (s, _x, 50*i-20);   setProperty (s, _y, 30);   // ここでsに変数を受け渡したい。 }

    • ベストアンサー
    • Flash
  • flashlite1.1の違う階層にある変数の使いかたを教えてください

    flashlite1.1の違う階層にある変数の使いかたを教えてください! flashlite1.1で携帯サイトをつくっています。 変数をルートの1フレーム目に置いたとして、違う階層からその変数はどうやって 使ったらいいのでしょうか。色々やってみましたが上手くいきません… どうしたらいいのが教えてください。 ※変数はフェードインを行うためのアルファの値にしています。 まず始めにルートに aa=30; と書きました。そしてルートに配置しているムービークリップの中のレイヤーの1フレーム目に _alpha=0; 2フレーム目に tellTarget("../"){ trace(aa); } _alpha+=aa; 3フレーム目に gotoAndPlay(2); と書きました。トレースの値は30が出力されます。なのに画面は真っ白なままです。 2フレーム目に書いた _alpha+=aa; の「aa」の部分に30という文字を入れたら、フェードインができます。 これは変数の数値をトレースできても、使い方が間違えている、ということなのでしょうか…? とても困っています。 おわかりになる方、教えてください!!!

  • 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初心者で、レベルの低い質問だとは思いますが申し訳ありません。単純なシンタックスに関する質問です。 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
  • ActionScript3.0フレーム移動について

    お世話になります。 Flash ActionScript3.0で、ボタンをクリックしたら、 階層違いのシーンに移動するという 単純なところでつまずいています。 一番上の階層には、 1フレーム目 フレームラベル "a" 2フレーム目 フレームラベル "b" として、それぞれ this.stop();を書いてあります。 "a""b"には、それぞれムービークリップが配置してあって、 今やりたいことは、"a"に配置してあるムービークリップの 2つ下(中?)の階層にあるボタンをクリックしたら、一番上の階層の"b"に移動して、 "b"に配置してあるムービークリップを表示するようにしたいのです。 "a"のムービークリップのボタンのあるフレームには、 this.stop(); button01.addEventListener(MouseEvent.CLICK,jumpB); function jumpB(event:MouseEvent):void { MovieClip(parent.parent).gotoAndStop("b"); } と書いてみましたが、 [TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。] と怒られます。 試しに MovieClip(stage).gotoAndStop("b"); とか、"b"に配置してあるムービークリップにインスタンス名"b_mc"を与えて MovieClip(parent.parent).b_mc.play(); などと苦し紛れにやってみましたが、すべて同じように怒られます。 どのようにすれば、下の階層から一番上の階層の別フレームに 移動することができますでしょうか? よろしくお願い致します。

  • 変数に格納できる桁数に制限はあるの?

    スカラー変数に格納できる桁数に制限はあるのでしょうか? 制限があるとすれば、どうすれば解除できるのでしょうか? 具体的には下記のような手順です。 小数15位まである数値(整数部は3桁)を変数($hoge)に代入する。 $hoge = 123.123456789012345; 次に、この変数を他の変数($fuga)に代入する。 $fuga = $hoge; さらにこの変数をSmarthに渡してブラウザに表示させると、小数点以下が12桁までしか表示されません。 どうすれば15桁をそのまま表示させることができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • addchildからrootに命令

    flash cs3、actionscript3.0で制作しています。 メインのタイムラインに var tra:trailer = new trailer(); stage.addChild(tra); と書いてライブラリー内にあるクラス名trailerのムービークリップを生成しています。 この生成されたtrailerの中にボタンがあってそこからrootに置いてあるムービークリップに命令を出したいのですが、actionscript2.0だったら_rootや_level0を使って書けたんですがactionscript3.0だとパスがわかりません。 どなたか分かる方いませんか?

    • ベストアンサー
    • Flash
  • (AS3)「var mc:MovieClip = new MC?();」 の?の部分を変数にできないか

    タイトルの通りです。 今ライブラリには100個のムービークリップがあって、それぞれMC1~MC100までのリンケージ名(クラス名)でActionScriptに書き出しているものとします。 これらを動的に「var mc:MovieClip = new MC?();」というふうにしたいのですが、うまくいきません。 一応下のように自分なりに考えてみたのですがやっぱりダメでした。 var i:int = 3; var str:String = "MC"+i; var mc:MovieClip = new str(); stage.addChild(mc);

    • ベストアンサー
    • Flash
  • actionscript 2.0 配列型変数をグローバル変数として扱いたい。

    action script2.0で ある変数を、共有しようと、ムービークリップに _global.hoge = _name(ムービーのインスタンス名); というような記述をしました。 すると、たしかにほかのどのムービークリップでも hogeという値は取り出すことができました。 ところが、インスタンスはひとつではなく複数あるため、 _global.hoge = _nameが記述されているムービークリップがいくつもあると、 次々上書きされ、結局hogeは、最後に読み込んだ _nameの値が入ってしまうという現象が起きたのです。 そこで _global.hoge[_name] = _name; というような、変数名がかぶらぬよう配列に変更してみました。 ところが、また問題が発生しました。 なぜか、配列だと頭に_globalとついていても グローバル変数として扱ってくれず、 ほかの場所で hoge[1] 等と記述しても全く値が取り出せないのです。 また、同ムービークリップ内ではちゃんと取り出せました。 どうすれば、配列変数をグローバル変数として 扱うことができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • ムービークリップの名前に””(ダブルクオーテーション)は使えない?

    Flashで1つのムービークリップを複製し、ムービークリップの名前に変数を挿入して使いたいのです。例えば、_root.namae1._xというソースがあれば「namae1」の「namae」の部分は固定して「1」の部分に3だったり10だったりといった数字を代入したいのです。これを行うには"namae"+iのように変数iを用意してここに毎回違う数字が入るようにすればいいのですが、問題がありました。 先ほどのソースであれば、_root."namae"+1._xのような具合になるわけですが、ムービークリップの名前にダブルクオーテーションを使っていることが悪いようで、エラーが発生してしまいます。しかしこれ以外に固定された名前と変動する変数を結合して一つの文字列にする方法は無いと思います。なんらかの形でダブルクーテーション記号は出てきてしまうはずです。 これの対処方法を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash