陈海良十七帖集字创作:Flash中的load、onEnterFrame、onClipEvent(enterFra...

来源:百度文库 编辑:偶看新闻 时间:2024/05/06 17:07:31

Flash中的load、onEnterFrame、onClipEvent(enterFrame)  

2011-05-13 17:47:19|  分类: 计算机学习 |  标签: |字号大中小 订阅


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++;