entry of AS3

28 views
Skip to first unread message

Tomato

unread,
Oct 31, 2005, 9:21:25 PM10/31/05
to flashp...@googlegroups.com
昨天Fallfish和我说到了在FB2里编译AS3后的入口问题。
首先是很久前Pawaca给我的code:

public class HelloAS3 extends Sprite
{
 public function HelloAS3()
 {
  var tf:TextField=new TextField();
  tf.text="Hello HF!";
  addChild(tf);
 }
}
 
 
然后是 Fallfish 的code:
"
(2005-10-31 12:41:43)   Fallfish
我在一个as文件里写了两个class
package {
 import flash.display.MovieClip;
 import flash.display.TextField;
 public class AS3Test2 extends MovieClip {
  public function AS3Test2() {
   var tf:TextField=new TextField();
   tf.text="Hello HF2!";
   tf.x = 300;
   addChild(tf);
  }
 }
 public class AS3Test extends MovieClip {
  public function AS3Test() {
   var tf:TextField=new TextField();
   tf.text="Hello HF!";
   addChild(tf);
  }
 }
}

总是后面写的被显示 

"

 

我今天又试了两种情况:

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继承。
 
 

额....貌似就是这些吧.....
 
 
 

pawaca

unread,
Oct 31, 2005, 9:26:51 PM10/31/05
to flashp...@googlegroups.com
> public class AS3T2 extends Sprite {
> public function AS3() {
> var tf:TextField = new TextField();
> tf.text = "Hello HF222!";
> addChild(tf);
> }
> }
>}

>则什么都不显示,很简单,因为public的类名与AS文件名不同。

这段貌似是构造器名称写错了-___-

总的来说,编译器把作为as applications的文件中最后一个继承自Sprite/MovieClip的public类作为Root

Toma...@gmail.com

unread,
Oct 31, 2005, 9:29:34 PM10/31/05
to Flash Platform
-__-貌似是噢.......[且介]...

pawaca

unread,
Oct 31, 2005, 9:32:43 PM10/31/05
to Flash Platform
hehe,我之前也找了半天,想知道root在哪里,没想到就是自己写的那个类-__-,感觉理论上只要继承自
DisplayObjectContainer
的子类的子类就可以作为 root
吧(没有试过继承自Loader和Stage,好象也比较另类。。。。。。)

Arrix

unread,
Nov 1, 2005, 12:43:54 AM11/1/05
to Flash Platform
补充一下,AS3里面没有了_lockroot,因为通过不同的属性可以访问到不同的root。对于一个被load到另一个swf的swf,anyDisplayObjectIntance.root引用被载入的swf的root,anyDisplayObjectInstance.stage.root引用到的是top
level
swf的root,即一个Stage对象。令人混淆的是,top-level
Stage对象也由一个root属性,其实就指向Stage对象本身。
下面有一个test class
-----------------------------------------------
package {
import flash.display.MovieClip;
import flash.util.trace;

public class AS3Test extends MovieClip {
public function AS3Test() {
trace(this.root == stage.getChildAt(0)); //true
trace(this.root == stage.root); //false
trace(this.stage.root == this.stage); //true
trace(this.name); //root1
}
}
}
------------------
“编译器把作为as
applications的文件中最后一个继承自Sprite/MovieClip的public类作为Root
”,这里的root不是Stage对象。而player自动取了个名字叫root1,寒!难道AS3Test实例被自动当成了一个被载入的swf?

pawaca

unread,
Nov 1, 2005, 12:52:30 AM11/1/05
to flashp...@googlegroups.com
> swf的root,即一个Stage对象。

swf的root是你自己写的那个类,而不是 Stage 对象。

root.root 指向的是 root 本身,root.stage 指向的是程序的 stage实例, stage.root 和
stage.stage 指向的都是stage实例本身。

加个断点,在variables view里一看便知。


--
The browser is not a television.

Arrix

unread,
Nov 1, 2005, 6:58:27 AM11/1/05
to Flash Platform

pawaca wrote:
> > swf的root,即一个Stage对象。
>
> swf的root是你自己写的那个类,而不是 Stage 对象。
---------------------------------------

我写的是:"对于一个被load到另一个swf的swf,anyDispla-yObjectIntance.root引用被载入的swf的root,anyDisplayObjectInstance.stage.root引用到的是t-op

level
swf的root,即一个Stage对象。"
top level 那里发帖的时候被google group自动提行了-_-"

Reply all
Reply to author
Forward
0 new messages