设为首页
联系我们
收藏本站
 首页
 网站建设
 网络营销
 flash动画
 服务器技术
 电子商务
 电脑技术
 体坛快报
 娱乐八卦
热门关键字:   网站建设   网站   电子商务   flash动画   是否
  >> 点击排行
·十大小说风云榜--2007年11月
·士兵突击精彩剧照
·网友最想娶的十大女星
·电子商务信用评估与信用现状
·十大帅哥风云榜--2007年11月
·十大美女风云榜---2007年11
·从基础开始深入Flash AS3教
·SetInterval的用法详解
·11月6日十大电影风云榜---中文
·电子商务论文:电子商务诚信问题及其
  >> 相关文章
·Google排名技巧十五课学习笔记
·学习CSS的伪类,WEB标准学习
·CSS常用小技巧
·DIV CSS网页布局实例:十步学
·2008奥运会中国代表团成立 10
·伊拉克被正式取消参加北京奥运会资格
·去掉网页上的Flash动画虚线框
·在Mozilla和Firefox浏
·如何防止网页 Flash 广告被屏
·手写CSS应该注意的一些技巧
  >> 推荐文章
·Flash AS3对单个图片进行角
·从基础开始深入Flash AS3教
·从基础开始深入Flash AS3教
·从基础开始深入学Flash AS3
·从基础开始深入学Flash AS3
·从基础开始深入学Flash AS3
·从基础开始深入学Flash AS3
·Flash as3、Flex与as
·浅释ActionScript的代码
·浅释Flash ActionScr
 当前位置 → 攀登学习资源网flash动画action应用 → 浏览正文
SetInterval的用法详解
作者:佚名    来源:网络    点击数:   更新时间:2007年11月10日 【字体: 】     

Q;请问FlashMX脚本中Objects/core/function的方法.apply和.call和属性prototype有什么用处。
A:所有的函数都是Function这个对象的实例,所以每一个函数都有apply、call的方法以及prototype的属性。

myFunc.call(theObj, arg1, arg2....)的作用是执行myFunc函数,其参数为arg1, arg2...,但和一般的执行有些区别,这里它重新指定了myFunc的主体对象,也就是说,原来假设myFunc是myObj的一个成员函数或者myFunc是一个全局函数,现在就让它作为theObj的一个成员函数来执行,myFunc内部的this,就指代theObj

myFunc.apply(theObj, arguments)的作用和myFunc.call类似,theObj也是作为新指定的主体对象,只不过它把参数列表都封装到arguments数组中了。它一般是用来在一个函数内执行另一个函数,而需要成批传输参数,或者参数的个数事先不知道的情况下的。

prototype是用来形成类继承链的一个对象,比如定义了一个函数function myClass(){...},又定义了myClass.prototype.prop = 1;或者myClass.prototype.method = function (){...},那么当用这个函数构造的对象a = new myClass(),a就可以这样来调用这个类的成员:a.prop、a.method()。继承相对来说比较难理解些,我就不讲了

 SetInterval的用法详解


(翻译)作者 Trevor McCauley (a.k.a. senocular)
Version: Flash MX
Level: Beginner - Intermediate

简介:在flash中所有的东西都基于事件(event)。这些事件可以是用户触发的诸

如onMouseDown event 或者是按下按钮,还可以是flash时间线上帧的移动的结果。
利用后着的例子,常常是运用onEnterFrame event ,它允许一个命令或一系列命令

在每一帧被触发。运用这些AS,可以使得动画和主时间线同步发生。但是,随主时

间线的播放进程严格的基于影片设定的帧频或者说FPS (Frames Per Second) 。这

意味着你使用onEnterFrame event 事件的动画将在每一帧以每秒发生FPS次的方式

播放。例如,你的电影的帧频是12frame/S,那么onEnterFrame event就将一秒发生

12次。SetInterval 是FLASH MX的一种函数。它允许你使用自己乐意的基于时间的

事件,有点类似onEnterFrame event,但它是你自己定义的时间间隔。
为了避免所有的onEnterFrame面临的复杂性, 我们可以使用SetInterval。它如

同在美妙的音乐里夹杂的稳健的鼓声。通常鼓点都是很简单的重复打击鼓来配合乐

曲。如果你在你的CD里放一个打击乐,你将听到伴随鼓点的歌曲。按下停止键你将

停止了歌曲,听不到鼓点。SetInterval和其原理类似,就象是flash 影片(歌曲)

里面播放鼓点的CD机,只要你告诉SetInterval你想让鼓点敲击的多快。当然,在

flash里,你无必要敲鼓,只是写一些代码。在教程开始前,我们看看JS里类似的函

数是如何运用的。
JS里设定延时:
每一个熟悉JS的人,将感觉使用SetInterval很顺手因为它和JS里设定延时函数

setTimeout 很类似。setTimeout 运用在延迟一段时间,再进行某项操作。例如,

靠他,我们可以做一个连结,只有在点击后2秒的延迟,才会弹出窗口。下面给出例

子:
<s cript>
function ShowMessage(){
alert("Click!");
}
</s cript>
<a href="javas cript: ID = setTimeout('ShowMessage()', 2000);

void(0);">Click here</a><br>
它就是当你点击后,调用setTimeout来延时2秒。setTimeout靠操作clearTimeout()

来打断延时。在上述例子的实例里,你想防止窗口突然跳出,你需要用
clearTimeout()来作为返回值。例子:
<s cript>
function ShowMessage2(){
alert("Click!");
ID = setTimeout('ShowMessage2()', 2000);
}
</s cript>
<a href="javas cript: ID = setTimeout('ShowMessage2()', 2000);

void(0);">Click here</a><br>
<a href="javas cript: clearTimeout(ID);">Kill alert</a>
如果Kill alert在点击连接后2秒内点击,延时函数将被制止,ShowMessage()也不

会被执行。
AS里的setInterval
setInterval和setTimeout是相似的但有些不同。最大的区别是setInterval创

建一个动作连续不断的调用执行函数——象打击鼓点一样。setTimeout,如同上面

所说,将执行一次,然后就停止。一个setTimeout函数可以再次调用自己来模拟事

件的再次发生。例子:
<s cript>
function ShowMessage2(){
alert("Click!");
ID = setTimeout('ShowMessage2()', 2000);
}
</s cript>
<a href="javas cript: ID = setTimeout('ShowMessage2()', 2000);

void(0);">Click here</a><br>
<a href="javas cript: clearTimeout(ID);">Kill alert</a>
当Click here 被点击后,弹出窗体的信息将在2秒后显示并且循环执行,除非Kill

alert 被点击后调用clearTimeout来清除setTimeout。这是你必须理解的,因为

setInterval 不能用在onEnterFrame 事件中。setInterval不意味着可以在快速连

续进程中连续调用。它,通过自身,来在一段间隔后来成功的调用函数。它相较

onEnterFrame而言,不是每帧都要调用函数。当然,如果指定的时间过去了,

onEnterFrame也就不能再被叫做onEnterFrame事件了。
另一点不同的是setTimeout传递的是一个需要被执行的Javas cript命令。

SetInterval,传递的是将在时间间隔里被执行的函数(不带“()”),允许你在
Interval参数后定义函数参数。SetInterval允许用两种方法来调用。
1) 直接调用 2)间接引用
1. setInterval ( function, interval [, arg1, arg2, ..., argn] );
2. setInterval ( object, "methodName", interval [, arg1, arg2, ..., argn]

);
1的例子:
DisplayTrace = function(message){
trace(message);
}
ID = setInterval(DisplayTrace, 2000, "Interval called");
首先,函数被定义。setInterval 将在指定的间隔里被调用,在这个例子里,是

2000毫秒。在第二个参数interval后的参数,用来传递给函数。这里,就是
"Interval called"。看到的效果是,函数被调用后,在output窗口将看到Interval

called。
第一种用法基于直接调用函数。但很多时候需要调用一个对象函数,包括对象的属

性。第二种方法就派上了用处。
myObj = new Object();
myObj.DisplayTrace = function(message){
trace(message);
}
ID = setInterval(myObj, "DisplayTrace", 2000, "Interval called");
这里setInterval是通过指针的方式来调用函数的 。这意味着函数必须在对象体内

被调用。
另外,setInterval 返回的间隔可以用clearInterval() 函数来阻止间隔继续。
clearInterval类似JS的clearTimeout。就是setInterval的反意。间隔标识符,比如

在上面例子的ID,它将作为setInterval的返回值来制止多次的调用子函数:
clearInterval(ID);
需要申明的是在每一个setInterval的调用中,无法同时调用子函数。子函数只有

在时间间隔到了后才会执行。子函数在应用了setInterval 后,如果你尝试调用它

,你将得到一个错误的值,因为它没被运行。你确实想要子函数立即执行,它将在

调用setInterval之后被直接调用。
ID = setInterval(DisplayTrace, 2000, "Interval called");
DisplayTrace("Interval called");
总结:
综上所述,setInterval允许你在自己设定的时间段里来达到和onEnterFrame 不

一样的事件,并不基于电影的帧频率。关键需要理解的是,setInterval 完全独立

于时间轴。这意味着你的setInterval事件将以它被设定的时间来运行,无关FLASH

的帧频。用简单的话说,如果你的影片以FPS 每秒12次运行,而你有个大的MC要从

左运动到右面且在24帧后重复它。如果你建立一段每2秒发生的间隔,大的MC将不会

精确的在2秒后重复运动而是稍微慢点,这样interval 的调用将被关闭,因为flash

不能跟上这样的刷屏节奏。也就是说SetInterval 将很精确的配合时间间隔,而不

管flash能否跟的上。因此,flash跟不上SetInterval的函数调用,这个函数将不会

被执行了。
应用:
因为SetInterval和onEnterFrame event很相象。从技术的角度说,SetInterval可

以应用多次。当然和普通的方法有些不同,setInterval最好和count-down 或其他

与时间相关的命令来应用。
displayTime = 30;
countDown = function(message){
displayTime--;
if (displayTime == 0){
clearInterval(timer);
trace("Times Up!");
}
}
timer = setInterval(countDown, 1000);
这儿,每秒displayTime 将自减一直到为0。一旦为0,countDown 函数将清除自身

的时间间隔,避免时间在为负数的情况下继续计算。
你得小心的使用这些计时用法,特别是在游戏里。知道了setInterval独立于时间轴

来运行,使用低性能电脑的人将因为机器缓慢的运行速度而不能完成指令。这中情

况下最好用基于时间轴的时间计算。
另一个setInterval 的应用就是使得MC在独立于主时间轴的情况下运行。例如,它

将使得mc在12帧/秒的影片里以5帧/秒甚至30帧/秒的速度运行。通过和

updateAfterEvent()结合,clearInterval 将在下一帧到来之前快速刷新屏幕来显示

一些东西。 例子:
fastFrames = function(){
myMovie_mc.nextFrame();
updateAfterEvent();
}
speedyID = setInterval(fastFrames, 40);
在四十毫秒的间隔内,myMovie_mc 将以25帧/秒的速度运行。但是flash也有它自身

的限制。如果你设定的间隔太快让flash无法跟上,它将以自身最快的速度运行,你

的子函数将不能执行。
Loading 是现实中应用setInterval的又一个例子。用它的理由是你要做个preload

的效果而不去混淆onEnterFrame 事件。setInterval将通过自身,让你建立一个独

一无二的函数来检测swf被load了没有,然后播放。只有在这里,我们不用等待swf

所有字节都被载入,仅仅需要10帧,当他们可以提供时,开始播放。例子;
loadMovieNum("loadme.swf",1);
checkLoaded = function(){
if (_level1._framesloaded >= 10){
_level1.gotoAndStop(10);
clearInterval(intervalID);
}
}
intervalID = setInterval(checkLoaded, 50);
我们可以使用setInterval来模拟javas cript 中的setTimeout函数。例子;
_global.setTimeout = function(a,b,c, args){
// for a basic function call:
if (typeof arguments[0] == "function"){
args = arguments.slice(2);
var ID, func = function(){
a.apply(null, args);
clearInterval(ID);
}


ID = setInterval(func, b, args);

// for an object method call:
}else{
args = arguments.slice(3);
var ID, func = function(){
a[b].apply(a, args);
clearInterval(ID);
}
ID = setInterval(func, c, args);
}
return ID;
}
_global.clearTimeout = clearInterval;

结论:
尽管setInterval作为一个崭新的MX里的函数,并不能给予我们太多的激动。实际是

它是独立于帧的东西,可以抛弃一些flash影片里的累赘。无论如何,setInterval

是一个强劲的力量。远远不同于笨拙的flash 5里的getTimer or date。现在,

flash里的命令可以在一小段时间里精确的更容易的运行。你使用的函数将更贴近你

的要求。

setInterval在preload里的应用举例:
loadMovie("movie1.swf","mc1");
loadMovie("movie2.swf","mc2");
loadMovie("movie3.swf","mc3");
loadMovie("movie4.swf","mc4");

loaderInterval=setInterval(loadChecker,100);

function loadChecker(){
dataLoaded=mc1.getBytesLoaded()+mc2.getBytesLoaded()+
mc3.getBytesLoaded()+mc4.getBytesLoaded();
dataTotal=mc1.getBytesTotal()+mc2.getBytesTotal()+
mc3.getBytesTotal()+mc4.getBytesTotal();

if(dataLoaded>=dataTotal && dataLoaded > 0)
{ mc1.gotoAndPlay(2);
mc2.gotoAndPlay(2);
mc3.gotoAndPlay(2);
mc4.gotoAndPlay(2);
clearInterval(loaderInterval);
}

//进度条的尺寸:
_root.loaderBar._xscale=(dataLoaded/dataTotal)*100;
}

 

Tags:网站建设 flash动画
关于我们 | 服务条款 | 免责声明 | 友情链接
陕ICP备08001548号 版权所有 Copyright © 2007-2010 panda851 All Rights Reserved
panda851.com 攀登学习网