1:要广播enterFrame 事件,你要告诉你的程序去监听这个事件然后指定回调函数
addEventListener(Event.ENTER_FRAME, onEnterFrame);
2:第二个参数onEnterFrame,指向类中定义的回调函数,该函数需要传递进EVENT的一个实例:
private function onEnterFrame(event:Event):void { dosomething(); }
3. setInterval和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 技术更加灵活。