素材图片酷 图酷镜像二 | 壁纸酷 壁纸镜像二 | 写真扫图酷 | Free Wallpaper | 贴图论坛 | ·设为首页 ·加入收藏
您现在的位置: 图酷 >> 自习室 >> 多媒体制作 >> Flash >> 技巧经验 >> 教程正文

  没有公告


害死人的Sprite,发现新大陆,MovieClip.addFrameScript
作者: frogg
教程来源: 闪吧
教程等级:         ★★★
教程录入: 烤焦面包
教程审核: tucoo
添加时间: 2006-9-6
点击次数:
字体选择: 【字体:
相关操作: 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
热门信息:
推荐内容:

(本文适用于Actionscript 3和FLASH 9 PUBLIC ALPHA)
(如若转载,请留下作者frogcjn的Blog链接:frogcjn.blogba.cn)
没想到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,只有一个俄文网站http://orangeflash.eu/?p=65对这方法的两个参数有介绍:

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还有什么其他用处.

© 2006 frogcjn
附言: 本作品采用知识共享署名许可协议(Creative Commons License)进行许可,未经同意,不得用于商业用途。
  • 上一篇教程:
  • 下一篇教程:
  • ::版权和投稿说明::
    • 任何媒体、网站或个人转载、链接、转贴或以其他方式复制发表本站文章,在使用时务必注明“稿件来源:图酷”及“www.tucoo.com”字样,多谢。
    • 本站已注明“来源”的文章均为转载稿,本站转载出于传递更多信息之目的。如本站转载稿涉及版权等问题,请来信与本站联系。
    • 如果您有自己原创的作品,请向我们投稿哦!您可以通过Email:gogocat@21cn.com投出自己的作品,赶快行动吧!
    • 如果觉得我们的资源有用,请推荐给朋友,谢谢!
    ::相关教程::
    电影剪辑对象的绘图方法
    鼠绘环境背景内幕
    关于fscommand调用EXE的一点心得体会
    李宁网站上的菜单解析
    闪速极光的教程EBOOK
    控制动态文本滚动的方法
    DataGrid绑定动态XML,及分页诀窍
    Flash MX本地保存数据的方法
     
    网友评论:(评论内容只代表网友观点,与本站立场无关!) 发表评论