package swf_fla
{
import flash.display.*;
import flash.text.*;
dynamic public class MainTimeline extends MovieClip
{
public var myText:TextField;
public function MainTimeline()
{
addFrameScript(0, this.frame1, 9, this.frame10);
return;
}// end function
function frame10()
{
this.myText.text = "hello, see you again!";
return;
}// end function
function frame1()
{
this.myText = new TextField();
this.myText.text = "hello, Package!";
addChild(this.myText);
return;
}// end function
}
}
新建一个 fla 文件,在第20帧上加一个空白帧(确保我们有足够的帧可以用)。把前面得到的这个类文件当做是文档类,新建AS3文件,将类代码拷入,删除包名称 swf_fla ,与新建的 fla 文件保存在同一个目录下,为 fla 文件指定文档类的名称为 MainTimeline ,完成之后,运行可以看到,文本框正确的显示了出来。
运行之后可以发现:
1、 addFrameScript 函数只能实现向指定帧添加函数的功能,并不会直接的生成指定的帧,如果 fla 文件中只有一帧,那么第10帧的代码就不会生效。
2、文字有重影效果,这表明,当一轮播放结束后,下一轮重新播放时,旧的文本框并没有被自动覆盖掉,而是又新建了一个文本框,变量重名冲突的问题在这种“重播”情况下是不会发生的,我们通过在 frame1()函数中直接 trace( numChildren); 就可以发现,每过一轮这个值就会增加1,解决的办法就是,在重播前,将所有的子对象都移除,代码如下:
public function frame1()
{
while( numChildren >0){
removeChildAt(0);
}
trace( numChildren);
this.myText = new TextField();
this.myText.text = "hello, Package!";
addChild(this.myText);
return;
}// end function
因为重播状态下,舞台上应该保持一个全新状态,所以移除全部已有对象,可以保证一个干净的初始环境。再次执行,可以发现文本没有重叠现象了。