浏览 4667 次
锁定老帖子 主题:关于as3的一些总结
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-01
注意点:如果将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); ===========================================================> */ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-26
ActionScript学习讨论小组 欢迎大家加入大家可以这里学习交流 Flex、ActionScript知识
永久域名 http://actionscript.group.iteye.com |
|
返回顶楼 | |
发表时间:2010-10-20
spring_lmsd 写道 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); ===========================================================> */ |
|
返回顶楼 | |