removeChildができない

このQ&Aのポイント
  • FlashDevelopで開発しており、ライブラリから参照した画像を削除する際にremoveChildができません。
  • ライブラリから参照した画像以外のオブジェクトはremoveChildできるため、親の指定や関連性の問題ではなさそうです。
  • 解決策についてはまだ不明ですが、関連するサイトやフォーラムで情報を探しているとのことです。
回答を見る
  • ベストアンサー

removeChildができない

FlashDevelopで開発しており、中で使用する画像は [Embed(source = "../img/mark.png")] var Mark:Class; var m_bmMark:Bitmap = new Mark(); addChild(m_bmMark); の形式でライブラリから参照しています。 この後、処理が完了して不要なオブジェクトを削除しようとして removeChild(m_bmMark); のようにしたところ、 「指定した DisplayObject は呼び出し元の子でなければなりません。」 とエラーメッセージが出て、正常に削除することができません。 これはいったいどういうことなのでしょうか? ライブラリから参照した画像ではなく、Spriteなどのオブジェクトは特に問題なくremoveChildできます。 いろいろサイトを見て回り、addChildとremoveChildで異なる親を指定していた場合に同様のエラーが出るといった情報は見つけることが出来ましたが、 今回の場合、特に親を指定せずにaddChild、removeChildしていますので、関係はなさそうです。 何かお気づきの点がございましたらご回答よろしくお願いいたします。

  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • chika_008
  • ベストアンサー率80% (20/25)
回答No.1

原因がわかりかねますねー。。 まず、 addChild(m_bmMark);の前後に trace(numChildren); をつけてみてください。 trace(numChildren); addChild(m_bmMark); trace(numChildren); みたいな感じです。 それで表示してみてどうでしょうか? もし0が1になっていたらaddchildされている証拠なので removeChildAt(0); でindex番号で指定して消してみてください。 これを試してもらってもよろしいでしょうか。

amane123
質問者

お礼

ご回答ありがとうございます。 申し訳ありません、自己解決いたしました。 原因は、イベントリスナーを削除せずにそのオブジェクトをremoveChildしようとしたためのようです。 エラーの内容に気を取られて前後のミスを見逃していました。 お時間をとらせてしまい、申し訳ございませんでした。

関連する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);   }  } }

  • actionscript 3.0 初心者です

    現在bitmap処理について調べています。 以下の記述に置いて、ライブラリーにあるpng画像をbitmapで読み込みました。 この画像はswfファイルに埋め込み済みでクラスをtokyo1としています。 続いて、これを.draw()を使って画像に変化を起こそうとしましたが、 こちらはうまく行きませんでした。 どこかおかしいのでしょうか?お心当たりございましたら是非よろしくお願いします。 import flash.display.BitmapData; import flash.display.Bitmap; import flash.geom.Matrix; import flash.geom.ColorTransform; var rectX:Number=40; var rectY:Number=30; var rectwidth:Number=20; var rectheight:Number=20; var rect1:Rectangle=new Rectangle(rectX,rectY,rectwidth,rectheight); var btm_data:BitmapData=new tokyo1(); var btm_obj:Bitmap=new Bitmap(btm_data,PixelSnapping.AUTO,false); var matrix:Matrix=new Matrix(2,0,0,3,0,0); var color:ColorTransform=new ColorTransform(1,1,1,1,0,0,0,0); btm_data.draw(stage,matrix,color,BlendMode.NORMAL,rect1,true); addChild(btm_obj);

    • ベストアンサー
    • Flash
  • Spriteのサイズが取得できない

    毎度初歩的な質問で恐縮です。 下記のようにビットマップの中心が、スプライトの左上になるように スプライトにビットマップをaddChildしました。 で、その後のwidth,heightのプロパティを参照したところ ビットマップのサイズは取得できるのですが、 スプライトのサイズが取得できません。 どのようにすれば取得することができるのでしょうか。 var bm:Bitmap = new Bitmap(event.bitmapData) as Bitmap; bm.x = bm.width / 2 * -1 ; bm.y = bm.height / 2 * -1 ; bm.smoothing =true var bm_s:Sprite = new Sprite; bm_s.x = app_width / 2 + def_z ; bm_s.y = app_height + def_z ; bm_s.z = def_z; bm_s.width = bm.width ; bm_s.height = bm.height ; bm_s.addChild( bm ); trace( bm.width.toString() ); ←値は取得できる trace( bm_s.width.toString() );←値が0になる

    • ベストアンサー
    • Flash
  • addChildした後に操作したい。

    package { import flash.display.*; public class goo extends Sprite { public function goo() { create(); stage.myRect.y =100;// 1119 未定義である可能性が高い・・・エラー。 } public function create() { var myRect:Sprite = new Sprite(); myRect.graphics.beginFill(0xFF0000); myRect.graphics.drawRect(10,10,200,100); myRect.name = "rect"; addChild(myRect); } } } addChildした後にmyRectのyの位置等を変更するにはどうすればよいでしょうか。 また、この問題について詳しく載っているURL等があれば教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ASファイルからのstage

    flashcs3 actionscript3.0で作成しています。 asファイル "Test.as" package { import flash.display.DisplayObjectContainer; import flash.display.Sprite; import flash.display.Stage; import flash.display.StageDisplayState; import flash.events.*; public class Test extends Sprite { public function Test() { init(); } private function init() { for (var i:uint = 0; i<10; i++) { var sp:Sprite = new Sprite(); sp.graphics.beginFill(0x00CCFF); sp.graphics.drawRect(i*20,50,20,20); sp.graphics.endFill(); stage.addChild(sp); } } } } flash var hoge2 = new Test(); と書いてflash上のstage上にSpriteをaddChildしたいのですがstageをnullと解釈してしまいます。 この場合flash上のstageを参照するにはどうすれば良いのでしょうか?

    • ベストアンサー
    • Flash
  • as3 ムービークリップにビットマップデータを挿入するクラスがうまくい

    as3 ムービークリップにビットマップデータを挿入するクラスがうまくいかない 上記のとおりなんですが、 前提として ■ライブラリにjpgを一枚読み込んで、Photoというクラス名でリンケージしてあります。 ■ステージにmcというムービークリップを配置しています。 mcにビットマップ化したjpgをaddchildしたかったので、 メインフレームに下記を書きました。 -------------------------------------------------------- var name_str:String = "Photo"; var myClass:Class = Class(getDefinitionByName(name_str)); var bmd:BitmapData = new myClass(0, 0); var bm:Bitmap = new Bitmap(bmd); bm.pixelSnapping = PixelSnapping.ALWAYS; bm.smoothing = true; mc.addChild(bm); -------------------------------------------------------- ※今後動的に生成するのでクラス名は変数にしています。 これは問題なく行きました。 上記を外部クラス化したかったので、 下記のようにしました。 ■PhotoClass ---------------------------------------------------------------------- package { import flash.display.MovieClip; import flash.events.Event; import flash.display.Bitmap; import flash.display.BitmapData; import flash.utils.getDefinitionByName; import flash.display.PixelSnapping; public class PhotoClass extends Bitmap { private var myClass:Class;//クラス名 private var bmd:BitmapData; private var bm:Bitmap; //コンストラクタ public function PhotoClass(_name:String) { myClass = Class(getDefinitionByName(_name)); bmd = new myClass(0, 0); bm = new Bitmap(bmd); bm.pixelSnapping = PixelSnapping.ALWAYS; bm.smoothing = true; init(); } public function init():Bitmap { return bm; } } } ---------------------------------------------------------------------- ■メインフレーム var photoAdd:Bitmap = new PhotoClass("Photo"); mc.addChild(photoAdd); これがうまくいきません。 エラーはないのですが、ちゃんとmcに画像が読み込まれません。。。。 ご教授いただければと思います!

    • ベストアンサー
    • Flash
  • ActionScript3.0についての質問です

    はじめまして。 いまFlash ActionScript3.0を勉強中です。 フルスクリーンについてどうしてもわからないことがありまして 質問させていただきました。 フルスクリーン処理をasファイルで制作中で、 fullscreenボタンを押すとnormalボタンに切り替わる処理ができません。 特にエラーも起きなくて混乱中です。 すいませんがよろしくお願いします。 ※質問内容以外省略。 package { //インポート import flash.display.Sprite; import flash.display.SimpleButton; import flash.display.Stage; import flash.display.StageDisplayState; import flash.events.Event; import flash.events.MouseEvent; import flash.events.FullScreenEvent; [SWF(backgroundColor="#000000", width="600", height="400", frameRate="30")] public class Main extends Sprite { //プロパティ private var fullscreenBtn:Sprite; private var fullscreenBtn1:SimpleButton; private var normalBtn1:SimpleButton; // コンストラクタ public function Main() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; init(); stage.addEventListener(Event.RESIZE, updatePos, false, 0, true); } // メソッド private function init():void { fullscreenBtn = new Sprite(); addChild(fullscreenBtn); fullscreenBtn.y = 6; var fullscreenBtn1 = new FullscreenBtn(); var normalBtn1 = new NormalBtn(); fullscreenBtn.addChild(fullscreenBtn1); fullscreenBtn.addEventListener(MouseEvent.CLICK,btChangeClicHandler); stage.addEventListener(FullScreenEvent.FULL_SCREEN,stageFullScreenHandler); updatePos(null); } //イベント private function updatePos(evt:Event):void { fullscreenBtn.x = stage.stageWidth - 85; } //マウスイベント private function btChangeClicHandler(evt:MouseEvent):void { if (stage.displayState == StageDisplayState.FULL_SCREEN) { stage.displayState = StageDisplayState.NORMAL; } else { stage.displayState = StageDisplayState.FULL_SCREEN; } } //ボタンの切り替え ※この処理がうまくいきません。エラーは起こりません。 private function stageFullScreenHandler(evt:FullScreenEvent):void { if (evt.fullScreen) { fullscreenBtn.removeChild(fullscreenBtn1); fullscreenBtn.addChild(normalBtn1); } else { fullscreenBtn.removeChild(normalBtn1); fullscreenBtn.addChild(fullscreenBtn1); } } } }

    • ベストアンサー
    • Flash
  • 文字列の置き換え処理について

    いつもお世話になります。 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); }

    • ベストアンサー
    • Flash
  • wonderflで作ったクラスを、flaで呼び出す

    3Dオブジェクトが回るクラス http://wonderfl.net/c/cOMF を、同階層に置いたflaファイルで走らせて、swfファイルを作りたいのですが、 何か根本的に間違っているようで、どうしてもうまくいきません。 以下の手順だと思うのですが、、 1) 外部クラスをimportする 2) そのクラスを使って変数を作る?(型は?) 3) 作った変数をaddChildする? flaの1フレーム目: A) MovieClipで import PV3D_01; import flash.display.MovieClip; var showUp:MovieClip = new PV3D_01(); addChild(showUp); 上記を走らせると、以下のエラーが出ます。 1067: Implicit coercion of a value of type PV3D_01 to an unrelated type flash.display:MovieClip. B)Spriteを使ってみると import PV3D_01; import flash.display.Sprite; var showUp:Sprite = new PV3D_01(); addChild(showUp); こんなエラーが出ます。 INFO: Papervision3D 2.0.0 (March 12th, 2009) TypeError: Error #1009: Cannot access a property or method of a null object reference. at PV3D_01() at PV3D_01_kudou_fla::MainTimeline/frame1() おわかりの方、どうか!よろしくお願いします。

    • ベストアンサー
    • Flash
  • 外部クラスからステージへのaddChild()メソッドの利用について

    いつもお世話になります。 ActionScript3(以下AS3)で記述したスクリプトを外部クラス化したいと考えており、FLAファイル側で外部クラスsample.asクラスをnew sample();で呼び出し、外部クラス内で生成したSpriteをステージに追加する為にaddChild(basebg);と指定するとコンパイルエラーとなり、「1180:未定義である可能性が高いメソッドaddChildの呼び出しです。」と表示されます。 外部クラスにはbasebgに追加するaddChild()メソッドを複数使用していますが、それらはエラーが出ていません。 外部クラスからステージにオブジェクトを追加するにはどのような記述が必要でしょうか? 初歩的なミスかもしれませんが、ご教授いただけると幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • Flash