addChildで配置したMCのメソッドにアクセスする

2008年11月21日 18:39

あー、またハマッた。
参照系はどうも苦手らしい。
addChildにてライブラリのムービークリップを配置して、
そのクラス内のメソッドへアクセスしようとすると見慣れたアイツが表示される

「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」

ちなみにソースはこれ。

// ドキュメントクラス
package 
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    
    public class Test extends Sprite {
        private var mc:Mc;
        
        public function Test() {
            init();
        }
        
        private function init():void {
            mc = new Mc();
            mc.x = stage.stageWidth/2;
            mc.y = stage.stageHeight/2;
            mc.name = "mc1";
            addChild(mc);
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN, setPos, false, 0, true);
        }
        
        private function setPos(e:MouseEvent):void {
            var targetMc:MovieClip = getChildByName("mc1") as MovieClip;
            targetMc.randomPos(mouseX, mouseY);
        }
    }
}
// カスタムクラス
package 
{
    import flash.display.Sprite;
    
    public class Mc extends Sprite  {

        public function randomPos(x:int, y:int):void {
            this.x = x;
            this.y = y;
        }
    }
}

インスタンスの名前で参照するためにgetChildByNameを使用し、
それをバカのひとつ覚えでMovieClipにキャストしていたが、これが問題だったらしい。
これをインスタンスmc1のクラスであるMcにキャストしてやれば問題なく動く。
考えてみれば当たり前か…。
ということで、ドキュメントクラスのメソッドの部分を下記のように修正してやると動く。

    private function setPos(e:MouseEvent):void {
        var targetMc:Mc = getChildByName("mc1") as Mc;
        targetMc.randomPos(mouseX, mouseY);
    }

イメージはこんな感じ。

addChildで配置したMCのメソッドにアクセスするイメージ

カテゴリー: programming タグ:

コメントはまだありません

No comments yet.

TrackBack URL

Leave a comment