有关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);
- 默认分类(20)
- J2EE(25)
- Java(56)
- PHP(55)
- SEO(10)
- 网页设计(20)
- 网站建设(37)
- 数据库(7)
- JavaScript(17)
- JQuery(6)
- MySQL(20)
- SQL Server(6)
- Access(1)
- Oracle(6)
- office(6)
- Dreamweaver(4)
- Photoshop(12)
- Flash(9)
- Fireworks(13)
- CSS(14)
- HTML(4)
- .NET(7)
- ASP(2)
- DB2(1)
- Ajax(2)
- Linux(12)
- Struts(7)
- Hibernate(8)
- Spring(2)
- Jsp(22)
- Asp(8)
- C#(3)
- C++(1)
- 网络安全(5)
- 软件工程(7)
- XML(1)
- English(2)
- 计算机等级考试(2)
- 计算机病毒(4)
- 个人日志(76)
- 互联网(15)
- ActionScript(10)
- Android(3)
- 数据结构与算法(1)
- 游戏策略(3)
- 美文翻译(2)
- 编程开发(19)
- 计算机应用(4)
- 计算机(10)
- Unity3d(6)
- 其他(1)
- egret(1)