As3:在非构造函数上尝试实例化(BitmapData)

时间:2013-05-03 21:47:58

标签: actionscript-3 class constructor flash-cs5 instantiation

如果这个问题之前得到了回答或答案很明显,我很抱歉,但我真的可以帮上忙。

所以我有这个类,我想创建实例。我的想法是为每个实例提供一个独特的位图供以后使用,但我遇到了一些问题。

我的时间轴中的代码如下所示:

var en3:Chime_enemy = new Chime_enemy();
en3.icon_ = thundertest; //an image in my library

这是我班级中的代码。我将发布两个没有所需结果的功能选项:(1)

public class Chime_battler extends MovieClip
{
    public var bit:Bitmap;
    public var b:BitmapData;
    public var icon_:Class;

    public function Chime_battler()
    {
        bit = new Bitmap;
        b = new thundertest(30,30); //Should use icon_
        bit.bitmapData = b;
    }
}

然而,这也有效(IIRC),但看到我必须使用addChild,这不是一个理想的选择:(2)

public class Chime_battler extends MovieClip
{
    public var bit:Bitmap;
    public var b:BitmapData;
    public var icon_:Class;

    public function Chime_battler()
    {
        this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage(e:Event):void
    {
        this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

        bit = new Bitmap;
        b = new icon_;
        bit.bitmapData = b;
    }

我基本上想要使用(2),但是在构造函数中放置为(1)是。

以下是我将在以后(时间轴)中使用它的方法:

var img:Bitmap = new Bitmap();
img = en3.bit;
addChild(img);

如果这没有任何意义,我很抱歉。我很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

我会做这样的事情:

public class Chime_battler extends MovieClip {
    public var icon:Bitmap = new Bitmap;
    public function Chime_battler(iconBmd:BitmapData) {
        icon.bitmapData = iconBmd;
    }
}

然后:

var en3:Chime_Battler = new Chime_battler(new thundertest);
addChild(en1.icon);

这样你也可以为所有实例使用相同的bitmapdata保存一些内存(如果你不打算在每个实例中修改它):

var thunderIcon:BitmapData = new thundertest;
...
var en1:Chime_Battler = new Chime_battler(thunderIcon);
var en2:Chime_Battler = new Chime_battler(thunderIcon);
...
addChild(en1.icon);
addChild(en2.icon);

但是,如果你真的需要传递类名并在构造函数中创建实例(它有点难看,但有时需要它),你的构造函数将是这样的:

public class Chime_battler extends MovieClip {
    public var icon:Bitmap = new Bitmap;
    public function Chime_battler(IconClass:Class) {
        icon.bitmapData = new IconClass;
    }
}

然后:

var en3:Chime_Battler = new Chime_battler(thundertest);
addChild(en1.icon);