`
lixinye0123
  • 浏览: 323320 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

1.12. 长时间执行一个任务

阅读更多
1.12. 长时间执行一个任务
 
问题
我要长时间执行一个任务
解决办法
使用 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 技术更加灵活。 
分享到:
评论

相关推荐

    actionscript cook book 中文版

    1.12. 长时间执行一个任务 20 1.13. 创建可重用代码 22 1.14. 增强代码可重用能力 24 1.15. 从方法中退出 24 1.16. 获得方法的执行结果 25 1.17. 处理错误 26 第二章. 自定义类 29 2.0. 简介 29 2.1. 创建自定义类 ...

    你必须知道的495个C语言问题(PDF)

    4.4 我有个函数,它应该接受并初始化一个指针void f(int *ip) f static int dummy = 5; ip = &dummy;g 但是当我如下调用时: int *ip; f(ip); 调用者的指针却没有任何变化。. . . . . . . . . . . . . . . 18 4.5 我...

    ZendFramework中文文档

    3.2.2. 高级使用:持久一个 DbTable 结果对象 3.2.3. 高级用法示例 3.3. 摘要式认证 3.3.1. 简介 3.3.2. 规范(Specifics) 3.3.3. 身份(Identity) 3.4. HTTP 认证适配器 3.4.1. 简介 3.4.2. 设计回顾 ...

    测试培训教材

    一个好的测试管理工具应该能把以上几个阶段都管理起来。 测试人员每时每刻都在度量别人的工作成果,而测试人员的工作成果又由谁来度量呢?度量的标准和依据是什么呢?软件测试的度量是测试管理必须仔细思考的问题。...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    python cookbook(第3版)

    12.10 定义一个Actor任务 12.11 实现消息发布/订阅模型 12.12 使用生成器代替线程 12.13 多个线程队列轮询 12.14 在Unix系统上面启动守护进程 第十三章:脚本编程与系统管理 13.1 通过重定向/管道/文件接受...

    《你必须知道的495个C语言问题》

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...

    C#.net_经典编程例子400个

    第1章 窗体与界面设计 1 1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 5 实例005 可以拉伸...

Global site tag (gtag.js) - Google Analytics