总是后面写的被显示
"
我今天又试了两种情况:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.TextField;
public class AS3 extends MovieClip {
public function AS3() {
var tf:TextField = new TextField();
tf.text = "Hello HF!";
addChild(tf);
}
}
private class AS3T2 extends Sprite {
public function AS3() {
var tf:TextField = new TextField();
tf.text = "Hello HF222!";
addChild(tf);
}
}
}
正常显示 "Hello HF!"
而把public和private换一下:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.TextField;
private class AS3 extends MovieClip {
public function AS3() {
var tf:TextField = new TextField();
tf.text = "Hello HF!";
addChild(tf);
}
}
public class AS3T2 extends Sprite {
public function AS3() {
var tf:TextField = new TextField();
tf.text = "Hello HF222!";
addChild(tf);
}
}
}
则什么都不显示,很简单,因为public的类名与AS文件名不同。
然后我试着不让类从MovieClip或者Sprite继承:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.TextField;
public class AS3 {
public function AS3() {
var tf:TextField = new TextField();
tf.text
= "Hello HF!";
(new MovieClip()).addChild(tf);
}
}
}
这里,为了让AS通过编译,我在addChild方法前new了一个MovieClip。
编译后运行抛出异常 : "TypeError: Error #2023: Class AS3$ must inherit from Sprite to link to the root."
alt+enter打开AS Project的属性,里面有个选项是 ActionScript Applications ,这里可以指定 "select the files which should be compiled as applications" 。也就是说,这里制定入口的as文件,然后通过一个同名的类作为root进入整个程序,所以这个类必须从一个container继承。
>则什么都不显示,很简单,因为public的类名与AS文件名不同。
这段貌似是构造器名称写错了-___-
总的来说,编译器把作为as applications的文件中最后一个继承自Sprite/MovieClip的public类作为Root
swf的root是你自己写的那个类,而不是 Stage 对象。
root.root 指向的是 root 本身,root.stage 指向的是程序的 stage实例, stage.root 和
stage.stage 指向的都是stage实例本身。
加个断点,在variables view里一看便知。
--
The browser is not a television.
我写的是:"对于一个被load到另一个swf的swf,anyDispla-yObjectIntance.root引用被载入的swf的root,anyDisplayObjectInstance.stage.root引用到的是t-op
level
swf的root,即一个Stage对象。"
top level 那里发帖的时候被google group自动提行了-_-"