ActionScript3.0でMovieClipインスタンスを配列で生成する方法

このQ&Aのポイント
  • ActionScript3.0でMovieClipインスタンスを複数生成する方法をご紹介します。
  • 配列を使用してMovieClipインスタンスを簡単に生成することができます。
  • また、生成したインスタンスを独立して制御するための方法も解説します。
回答を見る
  • ベストアンサー

ActionScript3.0(アクションスクリプト3.0)でMovieClipインスタンスを配列で生成する方法

よろしくお願いいたします。 アクションスクリプト3.0において、あるMovieClipクラスから複数のMovieClipインスタンスを作り、それぞれを独立して制御させたい時に、 インスタンスを生成する際、配列でしようとしたのですがエラーとなりうまくいきません。 var my_mc[i]:MovieClip = new MC(); 上記の宣言を繰り返し処理により複数インスタンス生成をしようと思っていました。 MovieClipインスタンスを配列で生成する場合は別の方法があるのでしょうか?それともそもそもできないのでしょうか? また、MovieClipインスタンスをそれぞれ独立して制御させたい場合、別の方法などありますでしょうか? 以上、間違った表現等あるかもしれませんが、よろしくお願いいたします。

noname#120036
noname#120036
  • Flash
  • 回答数1
  • ありがとう数6

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

  • ベストアンサー
回答No.1

はじめまして。 次のようにするといいんではないでしょうか? var mc_array:Array = new Array(); for(var i:int=0;i<3;i++){ mc_array[i] = new MovieClip(); }

noname#120036
質問者

お礼

ITHIJIKATAさん 回答ありがとうございます! さっそく教えていただいた通り試してみたらバッチリでした(^^) ネットでかなり調べても解決法が見つからなかったので 本当に助かりました!!!!! ITHIJIKATAさんに本当に感謝します!! ありがとうございました!!!

関連するQ&A

  • 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
  • ステージにある複数のインスタンスを制御したいです

    ステージに配置してある複数のインスタンスをアクションスクリプトで制御したいです。 インスタンスには「mc0」~「mc9」の連番で名前をつけています。 例えば、それぞれのインスタンスのタイムラインを再生させる指示を与えるとすると、 mc0.gotoAndPlay("main"); mc1.gotoAndPlay("main"); mc2.gotoAndPlay("main"); mc3.gotoAndPlay("main"); ・ ・ ・ mc9.gotoAndPlay("main"); となると思いますが、もっとスマートに書くとするとどんな書き方があるでしょうか? 数がもっと増える可能性があるので、もっと合理的な方法を知りたいです。 アクションスクリプトで生成したインスタンスを動かすには、 for(var i:int=0;i<10;i++){ var mc:MovieClip=new McMC(); addChild(mc); mc.name="mc"+i; mc.x=200+i*50; mc.y=200; mc.gotoAndPlay("main"); } のような感じで動かすのはやったことがあるので 既にステージに直接配置されているインスタンスもfor文で同じように制御できると思い 以下のように試してみましたが… for(var i:int=0;i<10;i++){ var mc:MovieClip; mc.name="mc"+i; mc.x=200+i*50; mc.y=200; mc.gotoAndPlay("main"); } 未定義となってしまいます。 やはり地道に書くしかないのでしょうか? ご教授を宜しくお願い致します。 ※FlashCS4、AS3で作業しています。

    • ベストアンサー
    • Flash
  • attachMovieで生成したインスタンスを消す方法

    1.現在A.B.C・・・・という名前の多数のボタンがあります 2.それぞれをクリックすると、A1.B1.C1・・・・とそれぞれのインスタンスがZ_mcというムービークリップ内に生成されます。その時にボタンに記述したスクリプト on (press) { Z_mc.attachMovie( "識別子", "A1", 1); } 3.このままですとA.B.C・・・・とボタンをクリックしていくとインスタンスがA1.B1.C1・・・・と同じ場所に生成されるため、重なってしまいます。 どのようにボタンにスクリプトを記載すれば、前に生成されたインスタンスを削除して、新しいインスタンスを生成できるのでしょうか?よろしくお願いします。

    • ベストアンサー
    • Flash
  • アクションスクリプト3.0 MOUSE_OVER

    お世話になっております。 3枚の画像がMouse_overされた際に、別の画像に切り替わるアクションスクリプトを考えております。画像のインスタンス名で判定し、共通のファンクションで管理できればと思っております。 現時点では、参照値に代入できません というエラーがでています。インスタンス名と比較させるところで止まっているのはわかりますが、これをどのように解決したらよいのでしょうか。 googleでアクションスクリプト3.0 画像 切り替えで検索しましたが、いずれも、私がやりたいこととは違うものでした。一応、mouse_overの使い方では参考にしました。 ステージ上に二つのレイヤーを作成し、上にマウスオーバー状態、下にノーマルの状態の画像を配置しました。 どうか、ご教授いただけますでしょうか。 よろしくお願い致します。 現在のスクリプトは以下のような感じです。 public function init() {  aaa_over.visible = "false";  bbb_over.visible = "false";  ccc_over.visible = "false";  aaa.addEventListener(MouseEvent.MOUSE_OVER, overMouse);  bbb.addEventListener(MouseEvent.MOUSE_OVER, overMouse);  ccc.addEventListener(MouseEvent.MOUSE_OVER, overMouse); } private function overMouse(MC:MouseEvent):void{  var pointMc:MovieClip = MovieClip(MC.target);  var pic_over = pointMc.name;  pointMc.visible = "false";  pic_over+"_over".visible = "ture";  pointMc.addEventListener(MouseEvent.MOUSE_OUT, outMouse); } private function outMouse(mc:MouseEvent):void{  var pointMc:MovieClip = MovieClip(mc.target);  var pic_over = pointMc.name;  pointMc.visible = "ture";  pic_over+"_over".visible = "false"; }

    • ベストアンサー
    • Flash
  • インスタンス生成について

    いつもお世話になっております。 今回はインスタンス生成について質問させて下さい。 String クラスのインスタンス生成は、 String str1 = new String(); のように明示的に new 演算子を用いる方法と、 String str2 = "hoge"; のように生成する方法がありますよね。 str2 の方は、JVM が(?) 勝手にコンストラクタを呼び出してくれて、 インスタンスを生成してくれる、という認識でよいのでしょうか? また、明示的に「 new 演算子 + コンストラクタ」でインスタンスを生成する場合と、 そうでない場合の使い分けなどはあるのでしょうか? そもそも String 以外に、このような複数のパターンでインスタンスを生成することができる クラスは他にもあるのでしょうか? 以上、ご教授宜しくお願い致します。

    • ベストアンサー
    • Java
  • actionscript3.0 オブジェクトの動的生成

    actionscript3.0についての質問です。 イラストレーターのテキストツールのように 任意の文字オブジェクトを複数生成し、生成された任意の文字オブジェクト をドラッグで移動する処理をactionScriptで実行したいと考えています。 現在actionscript3.0で行いたいと考えている一連の流れは以下の通りです。 1.ステージに配置したテキストフィールに任意の文字列を入力 2.入力された文字列を参照してムービークリップ内のダイナミックテキストに出力。 3.ステージにボタンを配置し、それを押すことでステージに1.2の手順によって作成されたムービークリップが生成。 4.生成されたムービークリップをドラッグすると動かすことができる。 1から3までの内容を下記のようなスクリプトで行いました。 //ダイナミックテキストを内包するためのムービークリップを定義 //埋め込みアセットクラスmcからインスタンスを生成 var word_mc:MovieClip = new mc( ); //ボタンクリックイベントを登録 create_btn.addEventListener( MouseEvent.Click, creClick ); //ボタンクリック時の処理 function creClick( evt:MouseEvent ):void { //テキストフィールドinputWordに入力されたテキストを変数inputに格納 var input:String = inputWord.text; //word_mc内に配置したダイナミックテキストoutputWordに入力テキスト内容を出力 word_mc.outputword.text = input; //word_mcを画面に表示 addChild( word_mc ); } //word_mcをドラッグで移動させるためのスクリプト word_mc.addEventListener( MouseEvent.MOUSE_OVER, wordMO ); function wordMO( evt:MouseEvent ):void { word_mc.addEventListener( MouseEvent.MOUSE_DOWN, wordMD ); word_mc.addEventListener( MouseEvent.MOUSE_UP, wordMU ); } function wordMD( evt:MouseEvent ):void { word_mc.startDrag( ); } function wordMU( evt:MouseEvent ):void { word_mc.stopDrag( ); } ひとつのオブジェクトを生成するだけならこれで問題ないのですが、 このスクリプトでは、、"車"、"自転車"、"飛行機"という文字列をそれぞれ内包した変数名もしくはクラス名の違うオブジェクトを生成することが できません。 埋め込みアセットクラスをあらかじめ複数作っておいて、クラス名を 連番で名づけ、クラス名から動的にオブジェクトを生成すれば 内容の異なるオブジェクトを生成することは可能ですが、 単語を追加するたびに埋め込みアセットクラスを作成しなければ ならない上、変数名は同じなため、個々のオブジェクトをマウスドラッグすることができません。 イラストレーターのテキストツールのように 任意の文字列を生成した後、個々にマウスドラッグできようにするには どうしたら良いのでしょうか。 どうかご指導のほど、よろしくお願い致します。

    • ベストアンサー
    • Flash
  • 動的に生成されるインスタンス間のやりとりについて

    あるクラスのインスタンスが動的に複数生成される状態で,一つのインスタンスから, 複数の他インスタンスのメンバ関数(仮に関数A)を呼びたいと考えています. そこでstaticなインスタンスのリストのようなものを設けようと考えました. 各インスタンスの関数Aへ関数ポインタの配列を定義し, それによって上記を実現しようと思いました. しかし,インスタンス生成前にインスタンス名を指定して (instance_name_.*p)(); という様に呼べるわけもなく,どう動的にインスタンスのリストを保持するかが思いつきません. 説明が下手ですいません.どなたか教えていただけますでしょうか. よろしくお願いします. 環境 Windows XP, cygwin

  • ActionScriptで配列をクリアする方法を教えてください。

    ActionScriptで、オブジェクトを格納した配列をクリアする正しい方法を教えてください。 具体的には、 ・new Array() で配列を生成する。 ・new Object() で生成したオブジェクトを配列に格納する。 ・配列の中身を処理したあと、配列を一度クリアする。 ・配列に別のオブジェクトを格納する。 ような処理をしたいのですが、メモリリークを起こさずに配列をクリアするにはどうしたらいいでしょうか? 例えば、イメージはこんな感じです。(意味のないコードですが) // 配列の生成 var arr = new Array(); // 配列にオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i; } // 配列のクリア arr.length = 0; // クリアした配列に別のオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i * 2; } 上記のコードで、arr.length = 0; で配列をクリアしていますが、これで配列に格納されたオブジェクトが確保したメモリがすべて解放されるでしょうか? あるいは、配列の内容がなくなるまで pop() 等で取り出す等の処理をする必要があるでしょうか? 以上よろしくお願いします。

    • ベストアンサー
    • Flash
  • actionscript3.0で親階層にあるインスタンスの中のものを操

    actionscript3.0で親階層にあるインスタンスの中のものを操作したいのですが、うまくいきません。 具体的には、ボタンをクリックすると、ひとつ上の階層にある「aa_mc」の100フレームへgotoAndPlayするとしたいのですが、 スクリプトは以下の通りです。 //////////////////////////////////////////////////////// btn_mc.addEventListener(MouseEvent.CLICK, onClick); function onClick (eventObject:MouseEvent) :void { MovieClip(parent).aa_mc.gotoAndPlay(100); } //////////////////////////////////////////////////////// どなたかご教授お願いいたします。

  • 音のアクションスクリプトについて

    ActionScriptを使った音のスクリプトについて勉強しています。ステージ上に二つの音楽プレーヤーを設置し音楽を流す、という事からはじめてみたのですが、上手く行かずに困っています。 設置した音量+/-ボタンを押すと両方の音量が変わってしまったり、片側を再生している状態で、もう一方を再生すると、もう一方は停止してしまったり(目的的には困らないのですが、本来両方とも再生され音がでているのが本来の姿のようなので)、といった状態です。 何かを間違えた理解と書き方をしていると思うのですが、間違いの指摘や音のアクションスクリプトの書き方についてご教授いただければと思い、質問させていただきました。 複数音楽プレイヤーを設置 という事がしたい場合のアドバイスやご教授をいただきたく思います。 よろしくお願いします。 ステージ  MC01(インスタンス名、I_MC01)   L__MC再生ボタン(インスタンス名、I_saisei)   L__MC音量+ボタン   L__MC再生-ボタン  MC02(インスタンス名、I_MC02)   L__MC再生ボタン(インスタンス名、I_saisei)   L__MC音量+ボタン   L__MC再生-ボタン と二つのシンボルがステージ上に配置し、各MCに再生ボタンと音量+/-ボタンを配置しています。 MC01 onClipEvent (load) {    Hsound_MC01 = new Sound(I_MC01);    Hsound_MC01.attachSound("RS_MC01"); } MC再生ボタン onClipEvent (load) {    Hvol= 50; } on (release) {    _root.I_MC01.Hsound_MC01.stop();    _root.I_MC01.Hsound_MC01.start(); } onClipEvent (enterFrame) {    _root.I_MC01.Hsound_MC01.setVolume(this.Hvol); } MC音量+ボタンon (release) {    if (_root.I_MC01.I_saisei.Hvol<100) {       _root.I_MC01.I_saisei.Hvol += 10; } } と書きました。MC02も同じで、01と02が違うだけです。

    • ベストアンサー
    • Flash

専門家に質問してみよう