Flash中定时执行function
原文地址:http://teacher8.5d6d.com/thread-1657-1-1.html
间隔循环的三种表现方式
在本AS3.0教程中我们将学习到间隔循环的三种表现方式,希望对朋友们有所帮助~~ 如果想使动画不依赖于帧频,可使用3种方法:
1、setlnterval()函数
setlnterval()函数作用是每隔一定的时间,就调用函数
setlnterval()函数的形式为:
setlnterval(函数名,时间间隔,函数参数);
函数名是自定义的函数的名,时间间隔为毫秒,函数参数是自定义函数的参
下面制作一个计时器:
//时间的初始值
var t:int;
//定义一个无参函数
function time()
{
//输出时间
trace(++t / 10);
}
//每隔0.1秒调用一次函数
setInterval(time,100);
测试上面的代码,可在输出面板中看到时间以0.1秒在递增。
提示:setlnterval()函数每隔0.1秒调用一次函数,变量t以加1的方式进行递增,t除以10后可表示时间。
下面的代码调用一个有参函数:
//定义一个有参函数
function test(message)
{
trace(message);
}
//每隔500毫秒调用一次函数,输出“调用函数”
setInterval(test,500,"调用函数");
清除setInterval()的调用,使用clearInterval()函数
提示:要及时清除setInterval()函数的调用,否则会导致setInterval()函数的重复调用。
2、setTimeout()函数
setTimeout()函数的使用方法与setlnterval()函数的使用方法相同,也是每隔一定时间就调用函数。
setTimeout()函数的一般形式为:
setTimeout(函数名,时间间隔,函数参数);
调用一个无参函数:
//自定义函数,输出信息
function test()
{
trace("函数调用");
}
//每隔1000毫秒调用一次test(),输出信息。
setTimeout(test,1000);
清除setTimeout()的调用,使用clearTimeout()函数。
3、Timer类
AS3.0新增了Timer类来实现间隔调用程序,Timer类封装了许多属性、方法和事件。
使用Timer类不会像setInterval()重复积累调用,减少了出错的几率,可以自定义间隔时间,实现与帧频的脱离,是制作间隔效果的首选。
Timer类的构造函数有两个参数,第1个是以毫秒为单位的间隔数字,第2个是重复调用的次数。
创建Timer类的实例:
var myTimer:Timer = new Timer(1000,3);
在构造函数Timer()中,间隔时间为1000毫秒,重复次数为3次,调用从数字1开始,向上递增,当次数等于3时,停止调用。
Timer类有4个属性,两个为只读属性,两个为读写属性:
running属性:是只读属性,表示调用是否进行,如果处于调用状态,running的值为true,否则为false。currentCount属性:是只读属性,表示当前调用的次数。
delay属性:是读写属性,表示间隔调用的时间。
repeatCount属性:是读写属性,表示重复调用的次数。
Timer类有3个方法可调用:
start()方法:用于启动调用
spop()方法:用于停止调用
reset()方法:用于重置调用
Timer类有两个事件,当开始调用时会发生timer事件,调用结束时会发生timerComplete事件。这两个事件都是TimerEvent类的属性,事件名分别为Timer.TIMER和Timer.TIMER_COMPLETE。
下面是制作计时器的实例:
1、新建Flash文档
2、在图层1的第1帧,创建一个实例名为time的动态文本实例。
3、添加as图层,单击第1帧,打开动作面板输入代码:
//定义时间间隔
var interval:uint = 100;
//重复次数
var repeat:uint = 120;
//创建实例
var myTimer:Timer = new Timer(interval,repeat);
//注册timer事件
myTimer.addEventListener(TimerEvent.TIMER,timerHandler);
//启动计时器
myTimer.start();
//定义事件的接收函数
function timerHandler(event:TimerEvent):void
{
//得到Timer类的实例
var timer:Timer = event.target;
//计算秒数
var t:Number = timer.currentCount / 10;
//保留1位小数
time.text = t.toFixed(1);
}
每100毫秒调用函数一次,即间隔0.1秒,把次数除以10得到秒数。
4、测试影片(在测试时选择【文件】【发布设置】选【Flash】选项卡,选ActionScript3【设置】把严谨模式的勾去掉)。
setInterval()和clearInterval()详解:
1、setInterval和clearInterval都是全局函数,也就是_global.setInterval()和_global.clearInterval()。
这一点大家应该都知道,但是可能并没有特别注意。但是这点对我们理解他们很重要。setInterval的返回值是个间隔ID(数字),所以这个间隔ID也是全局的。
比如下面的代码:
var rootID=setInterval(_root, "test", 500, "rootID");
function test(arg) {
trace(arg);
}
我们用clearInterval(rootID)和用clearInterval(1)的作用是相同的。
2、每一次调用setInterval,就会返回一个间隔ID,这个ID数值为全局setInterval的调用次数。
比如下面的代码:
var rootID=setInterval(_root, "test", 500, "rootID");
btn1.onPress=function(){
setInterval(_root, "test", 500, "btn1_ID");
}
btn2.onPress=function(){
setInterval(_root, "test", 500, "btn2_ID");
}
function test(arg) {
trace(arg);
}
在这个例子里,我们能够用clearInterval(1)来清除间隔rootID。假如我们先点击btn1再点击btn2,那么就能够用clearInterval(2)来清除点击btn1所产生的间隔ID,而用clearInterval(3)来清除点击btn2所产生的间隔ID。相反,假如我们先是点击btn2再点击btn1,那么clearInterval(2)则是清除点击btn2所产生的间隔ID.
3、给间隔lID添加标识符
在实际编程中,用上面的clearInterval(数字)这样的方式固然能够清除间隔ID,但是一旦ID过多,我们就会无法识别该清除哪个ID。因此给间隔ID添加标识符就显得很重要。但是必须把他分配到一个对象的成员变量中。
比如下面的代码:
newtest();
function newtest(){
var newID=setInterval(_root, "test", 500, "btn2_ID");
}
function test(arg) {
trace(arg);
}
这样的标识方法就是错误的,因为testID是个局部变量,仅作用于new方法内。因而无法在其他地方用clearInterval(newID)来清除此间隔。而去掉前面的var就能够了(此时newID是_root的一个成员变量)。
4、增加一个清除loadMovieNum加载进来swf的间隔ID的例子:
在IntervalID2.swf文档里的有个间隔ID:
var IntervalID2=setInterval(_root, "test", 1000, "IntervalID2");
function test(arg) {
trace(arg);
}
在IntervalID1.swf里:
loadMovieNum("IntervalID2.swf",1)
btn1.onPress = function() {
clearInterval(_level1.IntervalID2)
IntervalID1=setInterval(_root, "test", 2000, "IntervalID1");
};
btn2.onPress = function() {
clearInterval(2)
//clearInterval(IntervalID1)
};
function test(arg) {
trace(arg);
}
在此例中,假如我们先点击btn1再点击btn2,那么2个间隔ID都会删除,而假如先点击btn2,那么IntervalID1是没有清除的。明白上面三点后,这些应该就是显而易见的了。
总结:了解了上面几个重点后,我想使用setInterval方法就会很清楚了,不会怕setInterval了而clearInterval不了的情况了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)