![](//pubimage.360doc.com/wz/default.gif) onClipEvent(): 这个语句指专门给电影剪辑添加命令的语句,就像on语句是专门给按钮添加命令一样。 影片剪辑事件类别 onClipEvent(load) 当影片片断第一次加载道时间轴时,会触发本事件一次 onClipEvent(enterFrame) 当影片片断加载时间轴时,不论是放映或停止状态或显示与否,都会不断触发本事件。所以只要此片断被加载后,此事件会一直不断地执行,直到影片片断被删除为止。 onClipEvent(unload) 当影片片断被删除时,会触发本事件一次。 onClipEvent(mouseDown) 当鼠标左键被按下时,会触发本事件一次。 onClipEvent(mouseUp) 当被按下的鼠标左键北放开时,会触发本事件一次。 onClipEvent(mouseMove) 只要在场景中移动鼠标,就会不断触发本事件。 onClipEvent(keyDown) 当键盘被按下时,会触发本事件。 onClipEvent(keyUp) 当已按下的键盘被松开时,会触发本事件一次 enterFrame()语句和load()语句: 要为影片剪辑添加脚本,首先要选中影片剪辑,再打开它对应的动作面板,然后在其中输入脚本。影片剪辑脚本和按钮的脚本类似,它们都使用事件处理函数,与按钮的on关键字不同,影片剪辑使用 onClipEvent关键字。当某种影片剪辑事件发生时,就会触发相应的事件处理函数。 影片剪辑最重要的两种事件是load和enterFrame, load事件在影片剪辑完全加载到内存中时发生。在每次播放Flash影片时,每个影片剪辑的load事件只发生一次。 在主时间轴停止播放时,影片中的影片剪辑并不会停止播放,这个特性决定了影片剪辑的另一个事件enterFrame的重要性。enterFrame事件在影片每次播放到影片剪辑所在帧时发生。如果主时间轴中只有一帧,且不论它是否在该帧停止,该帧中的影片剪辑都会不断触发enterFrame事件,且触发的频率与Flash影片的帧频一致。 影片剪辑事件的使用方法如下所示: onClipEvent (load) { var i = 0; } onClipEvent (enterFrame) { trace(i); i++; } 当影片剪辑的load事件发生时,将变量i设置为0。当影片剪辑的enterFrame事件发生时,向输出窗口中发送i的值,然后将i加1。输出窗口中会从0开始输出以1递增的数字序列,直到影片被关闭为止。 为了熟悉影片剪辑事件处理函数的用法,我们来为影片剪辑编写一段简单的脚本,使影片剪辑逆序播放,我们将从影片剪辑的最后一帧处开始播放,使用prevFrame命令使影片剪辑每次后退一帧。 本例文件场景中有一个影片剪辑元件MCaaa,查看一下它的属性面板,并没有为其实例命名,这是因为我们要直接在影片剪辑的动作面板中添加脚本,并不需要用到实例名称。 选中影片剪辑MCaaa,此时动作面板的标题栏中应为“动作-影片剪辑”。打开动作面板,其中添加了如下ActionScript: onClipEvent (load) { gotoAndStop(40); } onClipEvent (enterFrame) { prevFrame(); } 在事件处理函数onClipEvent (load)中,令Flash影片的播放头转到影片剪辑的第40帧(即最后一帧)。这个事件处理函数只在影片剪辑被加载完成时执行1次。第2个事件处理函数onClipEvent (enterFrame)每播放1帧就执行1次,使影片剪辑回退1帧。 按Ctrl+Enter键测试影片,你将看到齿轮以与上例相反的方向转动,直到影片剪辑的时间轴回到第1帧,prevFrame命令不起作用,影片剪辑停止播放。要让它连续不断的播放,可以在影片剪辑元件MCaaa的时间轴第1帧的动作面板中添加如下语句: gotoAndStop(40); load()语句的用法其实很简单,load()语句就是装载的意思,一但程序被激活,load()语句就发生事件,不用点击任何按钮就可以执行程序体,比如,你如果一打开你的swf格式的影片就想进入新浪主页,那么你就在你的fla文件(源文件)的第一贞上编写: load(getURL("http://www.sina.com.cn","_blank")) 这个语句就是说:你发布的swf格式的影片或者网页,一旦被打开,那么立即执行程序---直接进入新浪主页,并且在另外一个窗口打开新浪主页(_blank就是在另外一个窗口打开)!! ----------------------------------------------------------------------- 比如写在影片剪辑上的onClipEvent(load)是加载元件时执行动作,只会执行一次. 而onClipEvent(enterFrame)是进入帧时执行动作,影片剪辑加载完后就会进入帧并开始播放,只要它一直存在于舞台中,函数里面的动作就会一直执行. 你可以建一个影片剪辑,然后拖到舞台中,给影片剪辑加代码: onClipEvent (enterFrame) { _x =_x+2; } 然后测试影片,会看到那个影片剪辑不断向右移动. 而如果写onClipEvent (load) { _x =2; } 是看不到它移动的,因为,_x只在加载元件的时候执行了一次 2.这是两种事件,onenterframe事件,意思是进入帧事件,但是这样不好理解,说的通俗一点就是一种持续的意思,一般用于让一个动作往复执行 enterFrame 以影片帧频不断地触发此动作。首先处理与 enterFrame 剪辑事件关联的动作,然后才处理附加到受影响帧的所有帧动作脚本。 onClipEvent (enterFrame) { var rq:Date=new Date(); trace(rq.getSeconds()); //_x=_x+2; } 默认帧频下连续输出12个相同的秒数。
------------------------------------------------------------------------------------- 我有一mc,该mc里是一段动画,且mc里的第一帧上加了AS:stop()。 将此mc从符号库里拉至主场景,给mc加上AS: onClipEvent (load) { this.play(); } 测试的时候,该mc不会播放。而如果是 onClipEvent (enterFrame) { this.play(); } 却能够播放,这是为什么。说到底,是对这两个的区别没搞清楚。 ------------------------------------------------------------------- 在flashAS手册里,关于EnterFrame的解释是:进入帧。 _mc.onEnterFrame{}就是表示当影片播放到当前帧,触发一个事件。 刚开始学AS的时候,我顺其自然地认为,如果当前帧用了stop语句,那么影片就会停止播放,就不会再触发onEnterFrame事件了。但是有意思的是,实际上,EnterFrame的最多的用处是和stop配合来使用的。 在别的编程语言里,等待某个变量改变,一般用循环语句来等待。这些循环语句一般是if...else、do...loop、for ... next等等。这些在AS里也有,但是你自己试试看,一旦使用这些循环,一旦循环次数较多,很容易使影片停顿,甚至进入死循环。 在AS里,一般不用循环语句来监测变量。而是用EnterFrame和stop配合来实现的。 AS的帮助文章没有任何声明:当影片stop在当前帧的时候,并没有真正停止播放,而是反复播放当前帧。而且,是按照影片设定的帧频率反复播放,反复触发EnterFrame事件。 我为此疑惑很久。 但是,AS很多例子都利用这个模式来进行循环: stop(); _mc.onEnterFrame=function{ 程序处理语句 }; 了解这个道理,我们可以通过设定影片播放的帧频率来控制循环速度。比如说需要很慢的时候,甚至每秒钟循环一次也可以的。 下面说说onEnterFrame和onClipEvent(enterFrame)在使用上的不同。因为很多初学的都会有些疑惑的。
| onEnterFrame
| onClipEvent(enterFrame)
| 使用的地方
| 写在 帧 的 脚本编辑框 里
| 写在 MovieClip(影片剪辑) 的 脚本编辑框 里
| 格式
| _mc.onEenterFrame=function(){ }
| OnClipEvent(enterFrame){ }
| 类型
| 事件处理函数
| 事件
| 执行的先后循序
| 后
| 前
| 关于“执行的先后循序”是我自己的一个试验得出的结论。 我在一帧里,在帧的脚本里有: _mc.onEenterFrame=function(){ trace(“onEenterFrame”) } 然后在_mc的脚本里再写: onClipEvent(enterFrame) { trace(“onClipEvent(enterFrame)”) } 当时我的变态的心理是看看onEnterFrame和onClipEvent(enterFrame),到底哪个更厉害,结果出什么? 结果是: onClipEvent(enterFrame) onEnterFrame onClipEvent(enterFrame) onEnterFrame onClipEvent(enterFrame) onEnterFrame onClipEvent(enterFrame) onEnterFrame ----------------------------------------------------------------- 影片剪辑最重要的两种事件是load和enterFrame,load事件在影片剪辑完全加载到内存中时发生。在每次播放Flash影片时,每个影片剪辑的load事件只发生一次。 在主时间轴停止播放时,影片中的影片剪辑并不会停止播放,这个特性决定了影片剪辑的另一个事件enterFrame的重要性。enterFrame事件在影片每次播放到影片剪辑所在帧时发生。如果主时间轴中只有一帧,且不论它是否在该帧停止,该帧中的影片剪辑都会不断触发enterFrame事件,且触发的频率与Flash影片的帧频一致。 影片剪辑事件的使用方法如下所示: onClipEvent (load) { var i = 1; } onClipEvent (enterFrame) { duplicateMovieClip(_root.rain, "rain"+i, i); _root["rain"+i]._x = random(550); _root["rain"+i]._y = _root.rain._y+random(80); //切记要加_root. i++;
|