以后使用包来练习:
文件结构: Trial.fla
+
|___DayN (文件夹名)
+
|_____Main.as
在 as3 Preview 版中,时间线上写函数大都会有错误或警告
从概念上理解,时间轴上的函数变量,应该同时是 Document Class (或者应该说是 Object) 的成员
以下代码:
Day3 / Main.as
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:
trace("global functino a called...");
trace("timeline variable s="+s);
}
var s:String="timeline variable ";
a();
sayHello();
this.sayHi();
显示结果为:
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() ";
其余代码不变,得到输出为:
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 的成员。