1

我只是在使用 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());
}

但我不明白为什么:你能告诉我为什么吗?

4

1 回答 1

1

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

互联网上有很多关于强制转换多态性继承的信息。

于 2009-08-09T13:28:39.430 回答