加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex as3 长时间执行一个任务

发布时间:2020-12-15 05:14:39 所属栏目:百科 来源:网络整理
导读:问题 我要长时间执行一个任务 解决办法 使用 Timer 类,或者监听 sprite 的 enterFrame 事件 讨论 ? Timer 类是ActionScript 3.0新增的,来代替早期的 setInterval( ) 和 setTimeout( ) 函数。当创建Timer类的实例时,它会在每个时间间隔激活 timer 事件,你
问题
我要长时间执行一个任务
解决办法
使用 Timer 类,或者监听 sprite 的 enterFrame 事件
讨论
?
Timer 类是ActionScript 3.0新增的,来代替早期的 setInterval( ) 和 setTimeout( ) 函数。当创建Timer类的实例时,它会在每个时间间隔激活 timer 事件,你可以在事件之间指定延时,然后就有足够的时间去激活 Timer 构造器了:
var timer:Timer = new Timer(delay,repeatCount);
使用 addEventListener 来设置一个函数处理这个事件,然后使用timer的 start( ) 方法启动或stop( ) 停止它。
Timer 类属于 flash.utils 包,还有 TimerEvent 类在 flash.events 包中,因此需要导入它们:

package ? ... {?

????
import?flash.display.Sprite;?

????
import?flash.events.TimerEvent;?

????
import?flash.utils.Timer;?

?????

????
public?class?ExampleApplication?extends?Sprite?...{?

????????

????????
private?var?_PreviousTime:Number?=?0;?

?????????

????????
public?function?ExampleApplication(??)?...{?

????????????var?tTimer:Timer?
=?new?Timer(500,?10);?

????????????tTimer.addEventListener(TimerEvent.TIMER,?onTimer);?

????????????tTimer.start(??);?

????????}
?

?????????

????????
private?function?onTimer(event:TimerEvent):void?...{?

????????????trace(flash.utils.getTimer(??)?
-?_PreviousTime);?

????????????_PreviousTime?
=?flash.utils.getTimer(??);??

????????}
?

????}
?

}

getTimer( ) 函数已经被移动到flash.utils 包中了。它返回程序开始有到现在的相对时间(微妙)
上个例子中,事件每隔5毫秒激活一次。如果你想模拟setInterval( ) 函数,把重复次数设为0。 stop( ) 方法类似于clearInterval( ) 函数,停止定时器.
如果想模拟 setTimeout( ) 函数,设置重复数为1,定时器等到指定时间激活一次事件,然后停止。
Timer类最好的用处就是创建动画而不依赖于影片帧速。看下面的例子,两个定时器时间间隔分别为50微妙和100微妙:

package ? ... {?

????
import?flash.display.Sprite;?

????
import?flash.events.TimerEvent;?

????
import?flash.utils.Timer;?

?????

????
public?class?ExampleApplication?extends?Sprite?...{?

????????
private?var?_square:Sprite;?

????????
private?var?_circle:Sprite;?

?????????

?????????

????????
public?function?ExampleApplication(??)?...{?

????????????
//?创建两个图形?

????????????_square?=?new?Sprite(??);?

????????????_square.graphics.beginFill(
0xff0000);?

????????????_square.graphics.drawRect(
0,?0,?100,?100);?

????????????_square.graphics.endFill(??);?

????????????addChild(_square);?

????????????_square.x?
=?100;?

????????????_square.y?
=?50;?

?????????????

????????????_circle?
=?new?Sprite(??);?

????????????_circle.graphics.beginFill(
0x0000ff);?

????????????_circle.graphics.drawCircle(
50,?50,?50);?

????????????_circle.graphics.endFill(??);?

????????????addChild(_circle);?

????????????_circle.x?
=?100;?

????????????_circle.y?
=?200;?

?????????????

????????????
//?创建两个定时器,启动?

????????????var?squareTimer:Timer?=?new?Timer(50,?0);?

????????????squareTimer.addEventListener(TimerEvent.TIMER,?onSquareTimer);?

????????????squareTimer.start(??);?

?????????????

????????????var?circleTimer:Timer?
=?new?Timer(100,?0);?

????????????circleTimer.addEventListener(TimerEvent.TIMER,?onCircleTimer);?

????????????circleTimer.start(??);?

????????}
?

?????????

????????
//?定义两个事件句柄?

????????private?function?onSquareTimer(event:TimerEvent):void?...{?

????????????_square.x
++;?

????????}
?

?????????

????????
private?function?onCircleTimer(event:TimerEvent):void?...{?

????????????_circle.x
++;?

????????}
?

????}
?

}

当然用enterFrame 事件也可以实现的,但Timer 技术更加灵活。?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读