flex as3 长时间执行一个任务

问题
我要长时间执行一个任务
解决办法
使用 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(50010); 
            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(
00100100); 
            _square.graphics.endFill(  ); 
            addChild(_square); 
            _square.x 
= 100
            _square.y 
= 50
             
            _circle 
= new Sprite(  ); 
            _circle.graphics.beginFill(
0x0000ff); 
            _circle.graphics.drawCircle(
505050); 
            _circle.graphics.endFill(  ); 
            addChild(_circle); 
            _circle.x 
= 100
            _circle.y 
= 200
             
            
// 创建两个定时器,启动 
            var squareTimer:Timer = new Timer(500); 
            squareTimer.addEventListener(TimerEvent.TIMER, onSquareTimer); 
            squareTimer.start(  ); 
             
            var circleTimer:Timer 
= new Timer(1000); 
            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 技术更加灵活。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值