AS3继承:load或init事件?

时间:2010-08-17 13:38:04

标签: flash actionscript-3 inheritance

我们假设我们有以下课程:

public class ImageButton extends MovieClip
{  
    private var bmpNormal:BitmapData;

    // ------- Properties -------
    public function get BmpNormal():BitmapData { return bmpNormal; } 
    public function set BmpNormal(value:BitmapData):void {  bmpNormal = value; } 


    public function ImageButton()
    {
    }

    public function Draw()
    {
        var bm:Bitmap = new Bitmap(BmpNormal); 
        this.addChild(bm);
    }
}

使用以下代码添加ImageButton实例:

var imgBtn:ImageButton = new ImageButton();
imgBtn.BmpNormal = new onstageBMPData(0,0);
imgBtn.Draw();  //<- No need for this line ??
this.addChild(imgBtn);

现在问题/问题是draw()方法并不是必需的......当类被引入或加载时,必须有一种方法来执行draw例程,因此生成的代码将是:< / p>

var imgBtn:ImageButton = new ImageButton();
imgBtn.BmpNormal = new onstageBMPData(0,0);
this.addChild(imgBtn);

我们尝试使用INIT,ADDED或RENDER事件,但这似乎不起作用

    public function ImageButton()
    {
        this.addEventListener(Event.RENDER, onAdded, false, 0, false );
    }

2 个答案:

答案 0 :(得分:1)

尝试Event.ADDED_TO_STAGEEvent.REMOVED_FROM_STAGE,以便在您添加或删除到舞台显示列表时收到通知。

您可以在ImageButton实例本身中收听此事件。

public function ImageButton() {
    addEventListener(Event.ADDED_TO_STAGE,handleAdded);
    addEventListener(Event.REMOVED_FROM_STAGE,handleRemoved);
}

private function handleAdded(e:Event):void {
}

private function handleRemoved(e:Event):void {
}

答案 1 :(得分:1)

您可以在setter中添加Draw()方法:

 public function set BmpNormal(value:BitmapData):void {  
     bmpNormal = value; 
     Draw();
   }

 private function Draw()
 {
    var bm:Bitmap = new Bitmap(bmpNormal); 
    this.addChild(bm);
 }

由于bitmapData值在你的setter参数中传递,你不需要Event来调用Draw()方法,变量bmpNormal从setter获取它的值,然后它可以在Draw()函数中使用创建一个新的Bitmap实例,然后可以将其添加到ImageButton。