📄 delaydelegate.as
字号:
package com.teknision.utils
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class DelayDelegate{
[Bindable]
public var target:Function;
[Bindable]
public var delay:Number;
[Bindable]
public var useframes:Boolean=false;
private var __savedargs:Array;
private var __timer:Timer;
private var __sprite:Sprite;
private var __framecount:Number=0;
/////////////////////////////////////////////////////////////////////////////////////////////
static public function create(i_target:Function,i_delay:Number=1000,i_useframes:Boolean=false):Function{
var delegate:DelayDelegate=new DelayDelegate(i_target,i_delay,i_useframes);
return delegate.call;
}
/////////////////////////////////////////////////////////////////////////////////////////////
public function DelayDelegate(i_target:Function=null,i_delay:Number=1000,i_useframes:Boolean=false){
target=i_target;
delay=i_delay;
useframes=i_useframes;
}
public function call(...args):void{
__savedargs=args;
setTimerForCall();
}
public function clear():void{
clearTimer();
clearSprite();
}
/////////////////////////////////////////////////////////////////////////////////////////////
private function setTimerForCall():void{
clear();
if(useframes){
initDelayWithSprite();
}else{
initDelayWithTimer();
}
}
private function makeFinalCall():void{
if(target!=null){
target.apply(null,__savedargs);
}else{
throw(new Error("No target function specified for this DelayDelegate call"));
}
}
private function initDelayWithSprite():void{
clearSprite();
__sprite=new Sprite();
__sprite.addEventListener(Event.ENTER_FRAME,handleSpriteEnterFrame);
}
private function handleSpriteEnterFrame(event:Event):void{
if(__framecount<delay){
__framecount++;
}else{
clearSprite();
makeFinalCall();
}
}
private function clearSprite():void{
if(__sprite!=null){
__sprite.removeEventListener(Event.ENTER_FRAME,handleSpriteEnterFrame);
__framecount=0;
__sprite=null;
}
}
private function initDelayWithTimer():void{
clearTimer();
__timer=new Timer(delay);
__timer.addEventListener(TimerEvent.TIMER,handleTimerTrigger);
__timer.start();
}
private function handleTimerTrigger(event:TimerEvent):void{
clearTimer();
makeFinalCall();
}
private function clearTimer():void{
if(__timer!=null){
if(__timer.running){
__timer.stop();
}
__timer.removeEventListener(TimerEvent.TIMER,handleTimerTrigger);
__timer=null;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -