我只是使用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());
}
但我无法理解为什么:你能告诉我为什么吗?
答案 0 :(得分:1)
原因是getChildByName()函数返回一个DisplayObject。 DisplayObject没有getName函数。然而,brander类继承自(扩展)DisplayObject,因此您可以将其存储为DisplayObject。但是如果你想调用任何一个brander函数,你需要首先使用as将其强制转换为brader。
互联网上有几个地方casting,polymorphism和inheritance有很多信息。