ActionScript3で文字置き換え処理を実現する方法
- ActionScript3で文字の置き換え処理に関する質問です。ムービークリップをremoveChildする際に、共通の関数を使って処理したいです。
- 具体的には、ムービークリップの変数名を動的に置き換えてremoveChildできるようにしたいと思っています。
- 現在の処理ではエラーが発生してしまっていますが、正しい処理方法を教えてください。
- ベストアンサー
文字列の置き換え処理について
いつもお世話になります。 ActionScript3でサイト制作を行なっています。 初歩的な質問で大変恐縮ですが、文字の置き換え処理に関するご質問です。 「a_mc」というムービークリップがあり、関数Aの中で「a_mc」をthis.addChildします。 「b_mc」というムービークリップがあり、関数Aの中で「b_mc」をthis.addChildします。 以下「c_mc」、「d_mc」というムービークリップが続きます。 上記のムービークリップで不要になったものをremoveChildする時に、共通の関数で処理したいと考え、 this.removeChild(*_mc);という感じに*をa~dの文字列に置き換えて処理できるようにしたいと思い、 下記の処理を作成しましたが、「ReferenceError: Error #1065: 変数 b_mc は定義されていません。」 というエラーが表示されてしまいます。 上記の処理を実現するにはどのような処理方法が適切でしょうか? 是非ご教授ください。 宜しくお願い申し上げます。 // コンテンツMC var a_mc:MovieClip = new a_mcs(); var b_mc:MovieClip = new b_mcs(); var c_mc:MovieClip = new c_mcs(); var d_mc:MovieClip = new d_mcs(); this.addChild(a_mc); this.addChild(b_mc); this.addChild(c_mc); this.addChild(d_mc); // コンテンツ消去処理 // 例)ムービークリップb_mcをremoveChildする場合 removeFunc("b"); function removeFunc(str:String):void { var tempStr:String = str + "_mc"; var categoryNameClass:Class = Class(getDefinitionByName(tempStr)); var categoryContents:MovieClip = new categoryNameClass; this.removeChild(categoryContents); }
- John12345
- お礼率47% (47/99)
- Flash
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
単純に function removeFunc(str:String):void { this.removeChild(this[str+"_mc"]); } で良いと思います。 Google検索「配列アクセス演算子」 http://www.google.co.jp/search?hl=ja&source=hp&q=%E9%85%8D%E5%88%97%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%BC%94%E7%AE%97%E5%AD%90
関連するQ&A
- addChildとremoveChildの処理についてご教授ください
いつもお世話になります。 ActionScript3でサイト制作を行なっています。 初歩的な質問で大変恐縮ですが、addChildとremoveChildの処理に関するご質問です。 予め「a_mc」、「b_mc」、「bg_mc」というムービークリップを作成し、それぞれをリンケージしておきます。 1.ENTER_FRAME内の条件Aの中で「bg_mc」上に「a_mc」をaddChildします。 2.条件Bにあるhoge関数の中で「bg_mc」上に「b_mc」をaddChildします。 3.「a_mc」は不要なのでremoveChildしたいのですが、下記のエラーが出てしまいます。 【ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。】 上記のエラーの原因がよく理解できなかたので、色々試してみましたが、 例えば、条件Aの中でステージ上にaddChildしたオブジェクト「this.addChild(c)」は、 条件Bのhogeの中でremoveChildすることができました。 上記の3の処理ができない原因は何でしょうか? また、上記の処理を実現するにはどのような処理方法が適切でしょうか? 是非ご教授ください。 宜しくお願い申し上げます。 // 背景MC var bg:MovieClip = new bg_mc(); // コンテンツMC var a:MovieClip; var b:MovieClip; this.addEventListener(Event.ENTER_FRAME, visibleCheck); function visibleCheck(eventObject:Event):void { if(条件A) { a = new a_mc(); bg.addChild(a); } else if (条件B) { hoge(); function hoge():void { b = new b_mc(); bg.addChild(b); bg.removeChild(a); } } }
- 締切済み
- Flash
- removeChildについて(AS3)
ActionScript3のremoveChildについて、お教えください。 FlashCS5 windowsです。 どうぞ、よろしくお願いします。 順を追って、ご説明します。 ムービークリップ「テストA」「テストB」「テストC」の3つを作成します。 テストC→プロパティ→ActionScript用に書き出し→クラス で、TestCとクラス名を付けます。 ムービークリップ「テストA」のインスタンス名をtestA_mcとして、ステージに配置します。 testA_mc内のタイムラインに、 //---------- var testC_mc:TestC = new TestC(); addChild(testC_mc); //---------- と記述します。 ムービークリップ「テストB」を、ステージに配置します。 テストB内のタイムラインにremoveChildを書いて、 testA_mc内のtestC_mcをremoveChildしたいのですが、 どのように書けば、良いでしょうか、、、? ※不可能な場合は「不可能」と教えていただけますと、助かります。 よろしくお願いいたします。
- ベストアンサー
- 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
- removeChildで描画した絵(シンボル:ムービークリップ)を消し
removeChildで描画した絵(シンボル:ムービークリップ)を消したい。 お世話になります。 adobe Flash pro ActionScript 3.0 で作成しております。 左クリックを押したら、 var mc:pen=new pen; addChild(mc); mc.x=mouseX; mc.y=mouseY; でpenというムービークリップを表示させるようにしております。 removechildで消せるということはわかっているのですが、 具体的にどのようにしたら消せるのでしょうか? (1)直前に書いたmcを削除する方法 (2)今までに書いた全てのmcを削除する で教えて頂ければと思いますのでよろしくお願いします。
- ベストアンサー
- Flash
- as3 addchildで生成したMCにリンクを張る
下記のようなことがしたいのですが、 エラーになります。 //空のムービークリップを作成 var mc:MovieClip = new MovieClip(); mc.name = "test"; ~中略(画像を読み込んでます)~ stage.addChild(mc); stage.mc.addEventListener(MouseEvent.CLICK, function(event) { var theURL:URLRequest = new URLRequest("http://yahoo.co.jp"); navigateToURL(theURL); }); 生成したMCにリンクを張る場合は どのようにしたらよいのでしょうか。 ご教授お願いいたします。
- ベストアンサー
- Flash
- ActionScript3のMovieClipについて
メインのタイムライン上に動的に配置したMovieClip(a_mcとb_mcの2つ)がある場合、 a_mc内に配置したボタンからメインのタイムラインのラベル移動(gotoAndPlay)をさせたいのですが、このような操作は実現可能なのでしょうか。 また、a_mcからb_mcの表示位置の変更(b_mc.xやb_mc.alphaなど)を変更することはできるのでしょうか。 ちなみにメインのタイムライン上で var a_mc:a_movieclip = new a_movieclip(); var b_mc:b_movieclip = new b_movieclip(); addChild(a_mc); addChild(b_mc); としてMovieClipを作成しております。 開発環境は VISTA FlashCS3 ActionScript3 です。 いろいろと調べてみたのですが、 http://www.chimanaco.net/blog/archives/20081105113240.php が使えそうなのでしょうか… 大変申し訳ありませんが、ご回答をお願いいたします。
- ベストアンサー
- Flash
- 外部swf内関数の使い方を教えてください
actionscript 3でムービークリップ内に読み込んだ外部swf内の関数の使い方を教えてください。 以下仮ソースです var mc:MovieClip = new MovieClip(); var imgLoader:Loader = new Loader(); var path:URLRequest = new URLRequest("materials/key_550.swf"); var childSwf:MovieClip; imgLoader.load(path); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,compLoader); function compLoader(evt:Event):void{ mc.addChild(imgLoader); addChild(mc); childSwf = mc.imgLoader.content as MovieClip //ここをimgLoader.content as MovieClipとするといけるのですが、mcの子のloaderと指定したいのです。 startGOGO(); } function startGOGO():void{ childSwf.keyContMove(); //子のswf内の関数です。 } よろしくお願い致します。
- 締切済み
- Flash
- AS3.0 ループを利用したムービークリップ生成
お世話になります。 ソフトはFlashCS3を使用しています。Actionscript3.0で書き出そうと思っています。Actionscript3.0初心者ですがよろしくお願いします。 ライブラリーに Mc01,Mc02,Mc03,Mc04とクラスを指定したムービークリップを準備した状態でステージにムービークリップを生成しようと考えています。その際、for文を使って短く書きたいと思っています。 for (var i=0; i>4; i++){ var "Mc0"+i:"Mc0"+i = new "Mc0"+i(); "Mc0"+i.x = 10*i; "Mc0"+i.y = 10*i; this.addChild("Mc0"+1); } 上記のように書くと「1086:シンタックスエラー:identifierがMcの前に必要です。」とエラーが出てうまく作動しません。 参考までに現在は以下のようにすべて書き出しています。 //ムービクリップ01 var Mc01:Mc01 = new Mc01(); Mc01.x = 0; Mc01.y = 0; this.addChild(Mc01); //ムービクリップ02 var Mc02:Mc02 = new Mc02(); Mc02.x = 10; Mc02.y = 10; this.addChild(Mc02); …… 以下省略 特にfor文にこだわっててはいません。ループで生成できればOKです。 どなたかわかる方よろしくお願いします。
- ベストアンサー
- 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
- addChildで描画した絵(シンボル:ムービークリップ)を消したい。
addChildで描画した絵(シンボル:ムービークリップ)を消したい。 お世話になります。 adobe Flash pro ActionScript 3.0 で作成しております。 左クリックを押したら、 var mc:pen=new pen; addChild(mc); mc.x=mouseX; mc.y=mouseY; でpenというムービークリップを表示させるようにしております。 そこで、作成したmcを消す方法はどのようにしたらよいでしょうか? (1)直前に書いたmcを削除する方法 (2)今までに書いた全てのmcを削除する で教えて頂ければと思いますのでよろしくお願いします。
- ベストアンサー
- Flash
お礼
BlurFiltan様 早速のご回答ありがとう御座います。 仰る通りアクセス演算子でできますよね・・・。 何故あんな回りくどいやり方していたのでしょう・・・。 ポイント付与させていただきます。 ありがとう御座いました。