关于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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值