我们假设我们有以下课程:
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 );
}
答案 0 :(得分:1)
尝试Event.ADDED_TO_STAGE
和Event.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。