ActionScript 3 MovieClip类链接

时间:2009-08-09 12:51:21

标签: actionscript-3 class movieclip linkage

我只是使用Flash CS3 Pro来使用基本的ActionScript 3。

我在关键帧中放入了这个非常简单的代码来复制n个“brander”符号:

for (var i:Number=0; i<20; i++) {
    var m = new brander("MS_"+i);
    addChild(m);
    m.name = "MS_"+i;
    m.x = 20*i;
    m.alpha = a;
    a-=0.05;
    m.y = 20;
}

该符号链接到brander.as类。

班级就是这个:

package {
    import flash.display.*;
    public class brander extends MovieClip {
        var n:String;
        //
        public function brander(name) {
            setName(name);
        }
        //
        function setName(name) {
            this.n = name;
        }
        //
        function getName() {
            return n;
        }
    }
}

也很简单。

现在:我注意到我无法在这堂课中设置任何东西。所以,当我调用setName(创建“brander”实例)时,我没有设置任何东西。这可能吗?

我在没有调试的情况下进行了测试,只需编写:

btn.addEventListener(MouseEvent.MOUSE_DOWN, test);
//
function test(EVT) {
    trace(this.getChildByName("MS_2").getName());
}

为什么我们在这个类无法存储信息时链接一个类?我做错了什么?


编辑:

我发现这是有效的:

function fun(EVT) {
    trace((this.getChildByName("M_2") as brander).getName());
}

但我无法理解为什么:你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

原因是getChildByName()函数返回一个DisplayObject。 DisplayObject没有getName函数。然而,brander类继承自(扩展)DisplayObject,因此您可以将其存储为DisplayObject。但是如果你想调用任何一个brander函数,你需要首先使用as将其强制转换为brader。

互联网上有几个地方castingpolymorphisminheritance有很多信息。