flash与字符串:替换表情

Flash表情替换技巧
本文介绍了一种在Flash中实现表情替换的方法,通过正则表达式匹配并替换文本中的表情符号为图片链接,适用于Flash 10及更高版本的文本引擎。

今天想记下一些笔记,先感谢一下六指小龙龙的帮忙。其实这个是他写的,我在基础上修改一点,顺便记录一下相关的记录。在制作微博客户端时候,可以加入这个功能去。制作要求是替换中括号里面的内容,让他变成相关的图片链接。

例如:[ 哈哈 ] 对应链接是 <img src="1.gif"/>

[ 呵呵] 对应链接是 <img src="2.gif"/>

[嘻嘻 ] 对应链接是 <img src="3.gif"/>

替换出来的变成html的形式了,这样可以在flash 10 里面利用新的文本引擎制作相关的事情了。至于9.0 其实很多人都已经实现了,这个网上很多源码,而且解决方法很多很实用。我们只是理解一下思路就行。至于办法多种多样,我们去记录一下。

例如一段微博当中内容:当中会返回一些带有表情的字符串,如[哈哈] [太开心] [嘻嘻] 这样的表情,那么采用正则去替换相应的事情就是一件有趣的事情,因为正则强大可以解决这些字符串相应替换的问题,但是正则相对来讲比较难看,要经常写才能有感觉,个人感觉有时候吃不消。

现在测试一段文字:

如: 这是一个大坏蛋,[哈哈],不过他对我好好的[嘻嘻] [呵呵] ,你说是不是呢OMG[888]?

测试环境在flash cs5的情况下进行,采用两种文本进行对比。一种是传统的TextField 另外一种是TLF,对比出来的结果是不相同。

采用方式差别就可以在图中看出来,但是相对来讲TLF 不是适应很多场景,adobe官方文档里面有提及到这种新文本引擎,弊端的之处。所以使用的时候根据开发而定,而目前来讲,对付这个大怪物确实有点难消耗。毕竟TLF设计有点让人难以接受。比起TextField的简洁我会倾向这种设计。

注意:TLFText 是在舞台创建的TFL文本。

可以以下面的测试进行测试:

A:这是一个大坏蛋不过他对我好好的你说是不是呢OMG?(不含表情)

B:"这是一个大坏蛋,[HH],[哈哈]不过他对我好好的[笨蛋] [OK] ,[2dk]你说是不是呢OMG[888]?";(含有表情)

C:这是一个大坏蛋,[HH],不过他对我好好的[笨蛋] [OK] ,[2dk]你说是不是呢OMG[888]?";(含有中括号 不含有对应的表情)

测试代码:

import flash.text.TextField; var str:String = "这是一个大坏蛋,[哈哈],不过他对我好好的[嘻嘻] [呵呵] ,你说是不是呢OMG[888]?"; var msg:TextField=new TextField(); msg.autoSize = TextFieldAutoSize.LEFT; msg.multiline = true;//允许多行,要<br>发挥作用就要设置 msg.wordWrap = true;//自动换行,要图片能看就必须要设置 msg.width = 200; msg.height = 200; msg.border=true; addChild(msg); var myString:Array=new Array(); myString.push("[呵呵]","[嘻嘻]","[哈哈]","[爱你]","[晕]","[泪]","[馋嘴]","[抓狂]","[哼]","[可爱]"); //表情地址 var rep:Array=new Array(); rep.push("<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/eb/smile.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/eb/smile.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/c2/tooth.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/c2/tooth.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/6a/laugh.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/6a/laugh.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/7e/love.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/7e/love.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/a4/dizzy.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/a4/dizzy.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/d8/sad.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/d8/sad.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/b8/cz_org.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/b8/cz_org.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/4d/crazy.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/4d/crazy.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/19/hate.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/19/hate.gif" width='16' height='16'>", "<img src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/9c/tz_org.gif" mce_src="http://img.t.sinajs.cn/t3/style/images/common/face/ext/normal/9c/tz_org.gif" width='16' height='16'>"); var old:uint = getTimer(); str = StringUtil.ChangeFace(str,myString,rep); var now:uint = getTimer(); trace(now-old); trace(str); msg.htmlText = str; trace(TLFText); TLFText.htmlText=str;

package { public final class StringUtil { public static function ChangeFace(str:String,faceString:Array,urlArray:Array):String { var newstr:String = ""; //定义正则法规,匹配中括号里面汉字 var myPattern:RegExp=/\[([\u4e00-\u9fa5]*)\]/g; //定义搜索字符串,替换数组 if (myPattern.test(str)) { //定义搜索到匹配数组保存起来 var pattern:Array = str.match(myPattern); //使用双循环替换中文字符串 for (var i:int=0; i<pattern.length; i++) { //替换相应的标签,先是找到在myString中的表情的编号,然后找到rep数组对应的图片进行替换 var index:int = faceString.indexOf(pattern[i]); if (index != -1) { str = str.replace(pattern[i],urlArray[index]); newstr = str; } else { newstr = str; } } pattern = null; } else { return str; } return newstr; } } }

内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航避障;②研究智能优化算法(如CPO)在路径规划中的实际部署性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为系统鲁棒性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值