让AS2的事件像那么回事儿

用惯了AS3的事件机制,再回来用AS2的事件机制,怎么用怎么不爽。

特别是onRelease,onRollOver...这类鼠标事件,作用域好歹有个Delegate可以帮忙一下,最受不了的是,事件只能定义成一个函数。

好在AS2比较容易hack,随便写了个方法,让函数支持add,remove。用起来还有点像C#的感觉\~o~/

ContractedBlock.gif ExpandedBlockStart.gif Code
 1     /**
 2      * var obj = {_name:'obj'};
 3      * obj.func = function(){trace(this._name);};
 4      * with(this.createEmptyMovieClip('mc', 0))
 5      * {beginFill(0x0,100),moveTo(0,0);lineTo(100,0);lineTo(100,100);lineTo(0,100);lineTo(0,0);endFill()};
 6      * mc.num = 100;
 7      * mc.onRelease = Delegate.create2();
 8      * mc.onRelease.add( function(a,b){trace(a*b + this.num); }, 2,3 );
 9      * mc.onRelease.add( function(){ trace("I am going to be removed"); this.onRelease.rmv( arguments.callee ) }; );
10      * mc.onRelease.add( Delegate.create(obj,obj.func) );
11      * // back to AS2
12      * mc.onRelease = function(){trace(this);}
13      */
14     public static function create2(Void):Function
15     {
16         var list:Array = [];
17         var delegate:Function = function()
18         {
19             for(var i=0; i<list.length; i+=2)
20                 if(list[i]) list[i].apply( this, list[i+1] );
21         };
22         delegate.add = function( func:Function /*args */ )
23         {
24             delegate.rmv( func );
25             list.push( func, arguments.slice(1|| null );
26         };
27         delegate.rmv = function( func:Function )
28         {
29             for(var i=0; i<list.length; i+=2)
30                 if(list[i] == func)
31                     list[i] = list[i+1= null;
32         };
33 
34         return delegate;
35     }
36 
37 

转载于:https://www.cnblogs.com/holybozo/archive/2008/11/08/1329657.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值