(本文适用于Actionscript 3和FLASH 9 PUBLIC ALPHA)
(如若转载,请留下作者frogcjn的Blog链接:
[url=http://frogcjn.blogba.cn/]
frogcjn.blogba.cn
[/url]
)
没想到Sprite与MovieClip差别如此之大,以前只是以为Sprite只有一帧,MovieClip有无数帧.
有一次在fla文件的"Document class"填"A.as"
A.as中的内容:
package{
import flash.display.*;
public class A extends Sprite{//这里声明为继承Sprite,以前都是写成继承MovieClip
public function A(){
var 文本 = "A";
//...A构造函数的内容就省略了
}
}
}然后在舞台的时间轴(第一帧)上写:
trace(文本);按"ctrl+enter"测试,竟然显示如下的错误提示:
ReferenceError: Error #1065: 变量 addFrameScript 未定义。
at A$iinit()
我顶你个肺,哪里来的 addFrameScript 这个变量?FLASH 9 PUBLIC ALPHA总是输出莫名其妙的并且毫无用处的错误提示,真是顶你个肺!
于是我苦苦找BUG找了10分钟……最终怀疑到了"时间轴"和Sprite这两个可恶的家伙……将声明为继承Sprite改写为以前经常写的继承MovieClip ……真实太可恶了.
不过……我又知道了MovieClip的秘密:"addFrameScript"变量.将A.as写成继承MovieClip后,trace(addFrameScript);看看addFrameScript到底是什么:
trace的结果:
function Function() {}
查Flex 2的帮助,竟然没有说明"addFrameScript"这个方法,果然是个秘密!
将A.as改进为B.as,来详细研究:"addFrameScript"方法.
B.as内容:
package{
import flash.display.*;
public class B extends MovieClip{//这里改回以前经常写的MovieClip
var i:int;
public function B(){
i=0//在这里设置i的数值
if(i==0){
trace("构造函数运行");
return;
}
if(i==1){
trace("构造函数运行");
addFrameScript(1);
return;
}
if(i==2){
trace("构造函数运行");
addFrameScript(1,2);
return;
}
if(i==3){
trace("构造函数运行");
addFrameScript(1,2,3);
return;
}
}
}
}
在fla文件的"Document class"填"B.as",在舞台的时间轴(第一帧)上写:
trace("时间轴脚本运行");
然后"ctrl+enter"测试,结果的顺序是"构造函数运行""时间轴脚本运行",这是正常情况.
将B.as中在"//在这里设置i的数值"一行设置i的值为1,保存B.as,测试,输出结果:
构造函数运行
ArgumentError: Error #2001: 指定的参数太少;当前为 2,应该为 1。
at flash.display::MovieClip/addFrameScript()
at B$iinit()
时间轴脚本运行
设置i的值为2,保存B.as,测试,输出结果:
构造函数运行
时间轴脚本运行
设置i的值为3,保存B.as,测试,输出结果:
构造函数运行
ArgumentError: Error #2001: 指定的参数太少;当前为 4,应该为 3。
at flash.display::MovieClip/addFrameScript()
at B$iinit()
时间轴脚本运行
看来addFrameScript有两个参数.(并且还可以看出Error 报告的愚笨,竟然把参数数量都给弄错了)
那么addFrameScript两个参数应该填什么呢?查google,只有一个俄文网站
[url=http://orangeflash.eu/?p=65]
http://orangeflash.eu/?p=65
[/url]
对这方法的两个参数有介绍:
addFrameScript(frame:uint,func:Function);
注意frame指的是"时间轴帧数-1",也就是在第"frame+1"帧运行func.
进一步进行实验(实验过程我就不贴了)发现:
当addFrameScript在"Document class"使用时,测试,播放到第"frame+1"帧上时,把这一帧上原有的所有脚本都扔掉,不运行,而此时只运行func.之后继续正常地播放下一帧.
当addFrameScript在舞台时间轴上时,addFrameScript所在帧播放后,addFrameScript再生效.
例如在舞台时间轴的第5帧:
var A = function(){trace("A)};
addFrameScript(4,A);//不管在第5帧的第几行,都在播放完第5帧时生效
trace("5");
如果这个舞台只有5帧,并且前4帧时间轴脚本分别为trace自己的帧号,(见范例文件中的C.fla),那么输出内容及输出时间为:
1
2
3
4
5
1
2
3
4
A
1
2
3
4
A
1
//......对于addFrameScript的介绍就到这里了,
不知道addFrameScript还有什么其他用处.
[1b]范例文件[/1b]:
AS3Addscript.zip
© 2006 frogcjn
[1b]附言: 本作品采用[/1b]
[url=http://creativecommons.org/licenses/by-nc-nd/2.5/cn/][1b]
知识共享署名许可协议
[/1b][/url]
[1b](Creative Commons License)进行许可,未经同意,不得用于商业用途。
-->
[/1b]
本文转自:http://www.5uflash.com/flashjiaocheng/Flashaschengxu/339.html