• 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 }
  • 相关阅读:
    centos7.5部署mysql cluster NDB总结
    读《构建之法》13--17章有感
    读《构建之法》8--10章
    作业5.2
    作业5.1
    读《构建之法》6--7章读后感
    做汉堡,做汉堡
    《构建之法》1—5章读后感
    第二次作业
    1
  • 原文地址:https://www.cnblogs.com/louissong/p/2937121.html
Copyright © 2020-2023  润新知