Document Object 与 TimeLine functions 与 场景元件 的关系

来源:互联网 发布:java 获取今天凌晨 编辑:程序博客网 时间:2024/04/28 12:09

以后使用包来练习:
   文件结构: Trial.fla
                               +
                                |___DayN     (文件夹名)
                                           +
                                            |_____Main.as

 

在 as3 Preview 版中,时间线上写函数大都会有错误或警告
从概念上理解,时间轴上的函数变量,应该同时是 Document Class (或者应该说是 Object) 的成员
以下代码:

Day3 / Main.as

 

package Day3{
    
import flash.display.MovieClip;
    
    
public class Main extends MovieClip{
        
public function Main(){
            trace(
"=====Main constructing...
                  s="+s);
            trace("+++++++before try call a() in Main");
            a();
            trace(
"+++++++after try call a() in Main");
        }

        
public function sayHello(){
            trace(
"++++++++Main::sayHello called...");
        }

        
private function sayHi(){
            trace(
"++++++++I am s private function of class Main!");
        }

    }

}

 Trial.fla

第一帧AS:

 

function a(){
    trace(
"global functino a called...");    
    trace(
"timeline variable s="+s);
}

var s:String
="timeline variable ";
a();
sayHello();
this.sayHi();


显示结果为:

 

=====Main constructing...
                  s
=null
+++++++before try call a() in Main
global functino a called
...
timeline variable s
=null
+++++++after try call a() in Main
global functino a called
...
timeline variable s
=timeline variable 
++++++++Main::sayHello called...
++++++++I am s private function of class Main!

 

结论:

          时间轴代码在Document Class 构造函数执行之后,
          而且表现类似于 Document Class 的一个成员函数(事实上就是其一个成员函数?)
          
          但在时间轴上定义的局部变量却不像Document Class 的成员属性,
          且慢!!!!
          如果不是成员属性,应该发现警告才对呀(而不是为null)!!

 

修改下Main.as上的代码:
在 public function Main(){ 下加一句: s="define in Main() ";
其余代码不变,得到输出为:

 

=====Main constructing...
                  s
=this one define in Main
+++++++before try call a() in Main
global functino a called...
timeline variable s
=this one define in Main
+++++++after try call a() in Main
global functino a called...
timeline variable s
=timeline variable 
++++++++Main::sayHello called...
++++++++I am s private function of class Main!

 

这样基本上明白了,时间轴上的变量也是Document Class 的一个成员
可以推出,整个执行过程如下:

1,获取时间轴声明(包括函数和变量声明,同时声明并定义的取其声明)+document class 声明

2,把上面获取的声明合成一个类,并实例化之,使时间轴上的this指向此对象

3,执行此对象的构造函数,并把时间轴上的非声明语句放在构造函数的最后面执行
      (当不止一帧有函数时怎么执行?按时间轴的移动分别执行各帧的语句,可以在第2帧定义一个语句或执行一个函数试试)


有了这些认识,再定义一个时间轴的 MovieClip 拖在第一帧(不要放在左上角) 命名为 TLMC
在Main(){下加以下语句:
                  TLMC.x=0;
                  TLMC.y=0;      //(为了看到效果,TLMC不要放在左上角)

执行,可见到TLMC位置变化了,即,场景中的MC也是Document Class 的成员。

原创粉丝点击