天天看點

關于as3的一些總結

1.載入外部xml方法

注意點:如果将flash放在html中,as中xml的路徑都是相對html的路徑

2.滑鼠跟随事件

注意點:用stage.addEventListener(MouseEvent.MOUSE_MOVE, FollowMe2);// FollowMe2跟随事件方法名,FollowMe2方法中必須加上event.updateAfterEvent();

這樣滑鼠可以更流暢

3.動态文本遮罩

注意點:如果動态文本無法正常顯示設定過濾器

var txt_blur:BlurFilter = new BlurFilter(0, 0, 0);

intro.filters=[txt_blur];

設定動态遮罩:contentMc.mask=maskMC;

4.跳幀時無法讀取幀裡的元件

注意點:flash的跳幀延時問題,可以用Event.ENTER_FRAME事件監聽是否讀取到元件,讀取到後移除監聽(不知道是否有更好辦法)

5.關于監聽帶參

通常設定一個事件都是

元件.addEventListener(事件名,事件處理方法);

在這裡無法将這個事件的一些設定參數傳進處理方法中

在這裡分享一個工具類EventDpMediator.as

package CYPL.utils { 
import flash.events.Event; 
import flash.events.IEventDispatcher; 
import flash.utils.Dictionary; 
public class EventDpMediator { 
  private static var eventObj : Object; 

  private var  _dispatcher : IEventDispatcher; 
  /** 
   * @dispatcher 目标對象 
   */ 
  public function EventDpMediator(dispatcher : IEventDispatcher) { 
   _dispatcher = dispatcher; 
   eventObj = {}; 
  } 
  /** 
   * 注冊事件 
   * @eventType 事件類型 
   * @handler 響應方法 
   * @arg 參數對象 
   */ 
  public function addEventListener(eventType : String,handler : Function,arg : Object = null) : void { 
   //trace("addEventListener:::", eventType) 
   removeEventListener(eventType, handler); 
   if(eventObj[eventType] == undefined) { 
    eventObj[eventType] = new Dictionary; 
    eventObj[eventType]["count"] = 0; 
   } 
   eventObj[eventType]["count"]++; 
   _dispatcher.addEventListener(eventType, eventObj[eventType][handler] = handlerX.call(null, handler, arg)); 
  } 
  /** 
   * 删除事件 
   * @eventType 事件類型 
   * @handler 響應方法 
   */ 
  public function removeEventListener(eventType : String,handler : Function) : void { 
   if(!eventObj[eventType])return; 
   var __handler : Function = eventObj[eventType][handler]; 
   if(__handler == null)return; 
   //trace("removeEventListener", eventType); 
   _dispatcher.removeEventListener(eventType, __handler); 
   delete eventObj[eventType][handler]; 
   if(eventObj[eventType]["count"]-- == 0) { 
    delete eventObj[eventType]["count"]; 
    delete eventObj[eventType]; 
   } 
  } 
  private function handlerX(handler : Function,arg : Object) : Function { 
   var This : EventDpMediator = this; 
   return function(e : Event): void { 
    handler.call(null, This, e, arg); 
   }; 
  } 
} 
}            

使用例子:

/** 
* @author:CYPL 
* @用途:EventDispatcher的中介類,友善進行傳遞參數 
* @date:2009.7.14 
* @example: 
<============================================================ 
import CYPL.utils.EventDpMediator; 
var ms=new EventDpMediator(stage); 
ms.addEventListener(MouseEvent.MOUSE_DOWN,handler,{o:3}); 
ms.addEventListener(MouseEvent.MOUSE_UP,handler,4); 
ms.addEventListener(MouseEvent.CLICK,handler); 
//參數m:中介對象,e:事件對象,arg參數對象 
function handler(m:EventDpMediator,e:Event,arg:*=null) { 
switch (e.type) { 
case MouseEvent.MOUSE_DOWN : 
trace("MouseEvent.MOUSE_DOWN:",arg.o); 
break; 
case MouseEvent.MOUSE_UP : 
trace("MouseEvent.MOUSE_UP",arg); 
break; 
case MouseEvent.CLICK : 
trace("MouseEvent.CLICK:",arg); 
break; 
} 
//handler内部可以通過第一個參數中介對象來remove 
m.removeEventListener(MouseEvent.MOUSE_DOWN,handler); 
} 
//外部可以直接用中介對象來remove 
ms.removeEventListener(MouseEvent.MOUSE_UP,handler); 
===========================================================> 
*/            

轉自http://www.iteye.com/topic/605088