as3页游聊天框点击透明区域及普通文本支持寻路方案

as3页游聊天框点击透明区域及普通文本支持寻路方案
关于聊天模块点击非富文本,支持人物走路的问题,今天在群里和大伙讨论了一下,其中有个兄弟的方案是这样的:


方案一:


1、用一个文本框TF1将聊天信息显示出来;


2、将富文本(超级链接文本)存储在一个数组;


3、用一个TextField去显示一个富文本,然后盖在原富文本上面;


4、将TF1文本框的mouseEnabled设置为false。


对于这个方案,我觉得能够实现,原理和 图文混排 一样。但是要管理那么多 tf,比较消耗性能,也很繁琐。


经过尝试,我用自己的方法实现了此功能,方法非常简单。


方案二:


   描述:聊天窗背景是一个MC(panel),所有的聊天信息用一个tf来显示。


1、用panel和tf侦听鼠标点击事件,对tf侦听LINK事件;


2、panel和tf用同一个函数响应,然后抛出一个自定义事件,在这个自定义事件里将MouseEvent作为参数携带;


3、在寻路代码里面侦听这个自定义事件,然后通过参数MouseEvent可以或许点击的舞台坐标,从而计算人物行走


的目的地。这样就实现了点击非富文本可以寻路的功能。


  当然,不是这样做就完事了。这里还有个问题:点击富文本的时候,也会触发click鼠标事。,按照策划的要求,


点击富文本是不能寻路的。经测试发现,click事件发生在link事件之后。所以我在link事件里面将tf的click事件移除,


然后延迟100毫秒后再加上,这样就行了


下面是大致的代码:




 1 package
 2 {
 3     import flash.display.Scene;
 4     import flash.display.Sprite;
 5     import flash.events.MouseEvent;
 6     import flash.events.TextEvent;
 7     import flash.text.TextField;
 8     import flash.utils.setTimeout;
 9     
10     public class Text extends Sprite
11     {
12         private var _tf:TextField;
13         private var _panel:Sprite;
14         public function Text()
15         {
16             _tf = new TextField();
17             _panel = new Sprite();
18             //...
19             _tf.addEventListener(TextEvent.LINK,onLink);
20             _tf.addEventListener(MouseEvent.CLICK,onClick);
21             _panel.addEventListener(MouseEvent.CLICK,onClick);
22         }
23         
24         private function onLink(e:TextEvent):void
25         {
26         //    ... 
27             //为了点击富文本,不触发click事件,所以临时移除
28             if(_tf.hasEventListener('click'))
29                 _tf.removeEventListener(MouseEvent.CLICK,onClick);
30             setTimeout(setEvent,100);
31         }
32         
33         private function setEvent():void
34         {
35             _tf.addEventListener(MouseEvent.CLICK,onClick);
36         }
37         
38         private function onClick(e:MouseEvent):void
39         {
40             var event:SceneEvent = new ScneEvent();//自定义事件
41             event.data = e;
42             eventDispatcher(event);        
43         }
44     }
45 }


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值