当前位置:主页>FLASH AS 编程>AS基础篇>AS 3.0>文章内容
  • 教你如何替换AS3.0的事件
  • 来源:三七工作室 作者:三七 2007-10-31 【
FlashAs作品发表>>我要投稿 | FlashAs讨论区>>AS论坛
Flash Media Server学习站>>www.FMScn.com


AS3的事件主要是使用了EventDispatcher来实现,大大优化了程序结构,然而编码却有些麻烦,如添加事件,广播事件,移除事件等. 而且在某些异步操作个人感觉不是很方便.于是我想到了一个办法采用函数指针的方式[我学C留下的"后遗症"],在适当的时候直引用这个函数执行相应的方法. 具体代码如下:
1. 先建一个类Base.as,它主要作广播事件.

Base.as代码
  1. package  
  2. {  
  3.     public class Base  
  4.     {  
  5.         // 中转调用.  
  6.         public var loadFinished:Function;  
  7.         public function Base():void{  
  8.             //...  
  9.         }  
  10.           
  11.         /** 
  12.          * 异步处理方面的逻辑.... 
  13.          */  
  14.         public function load():void{  
  15.             Dispatcher();  
  16.         }  
  17.           
  18.         /** 
  19.          * 如果完成了,广播事件. 
  20.          */  
  21.         private function Dispatcher():void{  
  22.             try{  
  23.                 loadFinished();  
  24.             }catch(e:Error){  
  25.                 trace("引用的函数不存在.");  
  26.             };  
  27.         }  
  28.     }  
  29. }  


2. 再建一个类Demo.as,它使用Base.as中的方法和逻辑,Base执行完成任务之后它会将处理流程递给Demo.as

Demo.as代码
  1. package {  
  2.     import flash.display.Sprite;  
  3.   
  4.     public class Demo extends Sprite  
  5.     {  
  6.         public function Demo()  
  7.         {  
  8.             var demo:Base=new Base();  
  9.             demo.loadFinished=hello;  
  10.             demo.load();  
  11.         }  
  12.           
  13.         /** 
  14.          * 流程执行到此. 
  15.          */  
  16.         private function hello():void{  
  17.             trace("Hello World");  
  18.         }  
  19.     }  
  20. }  



这种方法是纯C中的函数指针类似的应用, 在AS3中可以避免事件注册,侦听,移除等.但是它却无法避免引起程序逻辑处理的复杂性. 所以建议在程序设计中还是采用AS3的事件机制, 但是这种方法在一些特殊情况下使用起来简洁方便.





上一篇:AS3.0:如何移除容器下所有子显示对象?   下一篇:FLASH AS3.0 访问属性
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)