AS3聊天表情即图文混排源码

文章出处:天地会
原作者 explor http://bbs.9ria.com/thread-66682-1-1.html

  为了新人或者正在开发这块的AS3程序员,不浪费人生中最宝贵的时间,把多余的时间研究更强大的技术中去,以下贴出关于AS3聊天表情即图文混排的源码,只用了一个方法。

使用说明:
1.首先将以下的checkFaces()方法添加到你的应用程序中;
2.利用TextField.htmlText +="聊天内容",这样的代码,先输出内容,其中内容中包含表情符号,如:/:01、/:02、.../:99;
3.再添加表情: 利用checkFaces(TextField)方法,参数为上面的TextField对象。
4.new faceMC()中的faceMC是一个MC,这个MC中保存很多表情,每一帧上放一个表情MC。当然也可以改为每个MC一个表情,甚至有能力的改变即时加载图片,以图片形式来显示等等。
  1.               
  2. //添加表情
  3.                 public function checkFaces(tf:TextField):void{
  4.                         var htmlStr:String;
  5.                         var textStr:String;
  6.                         var indexAry:Array = new Array();//表情索引数组
  7.                         var pointObj:Array = new Array();//表情占位坐标数组
  8.                         var faceSign:Array = new Array();//表情符数组
  9.                         htmlStr = tf.htmlText;
  10.                         //表情在聊天内容的符号为: /:02 , 样式说明:/:为两个字符的标识符,02表示表情数;可以自己换成想要的。
  11.                         var reg:RegExp = /\/:[0-9]{2}/g;  
  12.                         faceSign = htmlStr.match(reg);//这里只搜索到两个表情符号
  13.                         if (faceSign.length == 0)return;
  14.                         //下面又把表情符号替换为空,接着下面去搜索空。如果下面去搜索表情符号
  15.                         tf.htmlText = htmlStr.replace(reg, "<font size=\'24\'> </font>");//把文本框内的内容用<font>字体标签代替字符串htmlStr中的表情符号
  16.                         var ii:uint = 0;
  17.                         textStr = tf.text;//再把文本框内的文本,非html文本赋给另一个字符串对象textStr
  18.                         while (1){
  19.                                 indexAry.push(textStr.indexOf(" ", ii));//循环搜索textField.text中的空格(即上面利用<font>标签替换的字符)索引位置,保存索引位置到indexAry数组中
  20.                                 if (indexAry[indexAry.length-1] == -1){//|  |
  21.                                         indexAry.pop();
  22.                                         break;
  23.                                 }
  24.                                 ii = indexAry[indexAry.length-1] + 1;
  25.                         }
  26.                         var jj:uint = 0;
  27.                         var storeHeight:Number=tf.height;//把textField行高赋给临时变量
  28.                         while (jj< indexAry.length){
  29.                                 tf.height=tf.textHeight;//把textField文本高赋给textField行高
  30.                                 pointObj.push(tf.getCharBoundaries(indexAry[jj]));//保存表情坐标位置到数组
  31.                                 tf.height=storeHeight;//把临时变量再赋给行高,还原。
  32.                                 jj++;
  33.                         }
  34.                         faceSign = faceSign.reverse();//反转表情符号数组
  35.                         pointObj = pointObj.reverse();//反转坐标对象数组
  36.                         var kk:uint = 0;
  37.                         while (kk< faceSign.length){
  38.                                 if (pointObj[kk] != null){
  39.                                         //创建一个表情对象
  40.                                         var n:uint = faceSign[kk].substr(2, 2);
  41.                                         var obj:MovieClip = new faceMC();//faceMC为资源文件中的影片剪辑
  42.                                         tf.parent.addChild(obj);
  43.                                         obj.name = "faces";
  44.                                         obj.gotoAndStop(n);//由于表情是以一个MC多帧来保存,所以计算出来的表情数,直接跳帧显示
  45.                                         obj.x = pointObj[kk].x;//设置表情的x坐标
  46.                                         obj.y = pointObj[kk].y;//设置表情的y坐标
  47.                                         obj = null;
  48.                                         kk++;
  49.                                 }
  50.                         }
  51.                         reg = null;
  52.                         faceSign = null;
  53.                         pointObj = null;
  54.                         indexAry = null;
  55.                         textStr = null;
  56.                         htmlStr = null;
  57.                 }
复制代码

由于其中代码部分算法取至网络,如有雷同,倍数感谢!在网上有些聊天表情算法代码虽然非常好,但没有一个整体出来,现在我整理出来,作为一个可用的整理奉献给大家。
方法内的算法有待改进,
在此,诚恳期望各用了此方法的AS大侠,把改进后的源码贴出来,大家共同进步!谢谢。

感谢天地会!从这里获得很多好东西!感谢前辈们!
posted @ 2011-03-01 12:34  rob_2010  阅读(572)  评论(0编辑  收藏  举报