之前在前面实现的一些方法,虽然可以实现,但是不够人性化,使用不方便,每一次都要添加很多相应的表情和图片地址,看新想法:
Flash文件第一帧内容:
import flash.text.TextField;
var old:uint=getTimer();
var str1:String="得分的将发生的房间
呵呵]/gvar myPattern1:RegExp
[嘻嘻]/gvar myPattern2:RegExp
[哈哈]
[爱你]gfh
[晕]gmyPattern5:RegExp
[泪]myPattern6:RegExp
[馋嘴]gp
[抓狂]gern8:RegExp
[哼]gvar myPattern9:RegExp
[可爱]";
var text1:TextField=new TextField();
text1.autoSize=TextFieldAutoSize.LEFT;
text1.multiline=true;//允许多行,要
发挥作用就要设置
text1.wordWrap=true;//自动换行,要图片能看就必须要设置
text1.width=stage.stageWidth;//要想看到文字这个要设置
text1.height=stage.stageHeight;//要想看到文字这个要设置
var chang1:urlChange1=new urlChange1();
str1=chang1.Change(str1);
var now:uint=getTimer();
trace(now-old);
trace(str1);
text1.htmlText=str1;
stage.addChild(text1);
AS 3.0 代码
package {
public class urlChange1 {
public function urlChange1() {
// constructor code
}
public function Change(str:String):String
{
var newstr:String;
//定义正则法规,匹配中括号里面汉字
var myPattern:RegExp=//[([/u4e00-/u9fa5]*)/]/g;
//定义搜索字符串,替换数组
var myString:Array=new Array();
myString.push("[呵呵]","[嘻嘻]","[哈哈]","[爱你]","[晕]","[泪]","[馋嘴]","[抓狂]","[哼]","[可爱]");
//定义代替文本数组,下面rep数组和上面myString数组两个要一一对应,否则会出错
var rep:Array=new Array();
rep.push("",
"",
"",
"",
"",
"",
"",
"",
"",
"");
//定义搜索到匹配数组保存起来
var pattern:Array=str.match(myPattern);
//使用双循环替换中文字符串
for(var i:int=0;i {
//替换相应的标签,先是找到在myString中的表情的编号,然后找到rep数组对应的图片进行替换
newstr=str.replace(pattern[i],rep[myString.indexOf(pattern[i])]);
//replace方法并没有改变str内容,不赋值的话,只能得到最后一个表情
str=newstr;
}
/*
trace(pattern.length);
trace(pattern);
*/
return newstr;
//用完可以去掉,免得浪费空间
pattern=null;
}
}
}
以上代码测试比之前版本的都好多了,起码快了好多,大概是3到4毫秒
可是为了更加实用,外面可以定义表情和图片地址,我们把里面的抽出来作为传递的参数:
Flash文件第一帧内容:
import flash.text.TextField;
var old:uint=getTimer();
var str1:String="得分的将发生的房间
呵呵]/gvar myPattern1:RegExp
[嘻嘻]/gvar myPattern2:RegExp
[哈哈]
[爱你]gfh
[晕]gmyPattern5:RegExp
[泪]myPattern6:RegExp
[馋嘴]gp
[抓狂]gern8:RegExp
[哼]gvar myPattern9:RegExp
[可爱]";
//定义搜索字符串,替换数组
var faceString:Array=new Array();
faceString.push("[呵呵]","[嘻嘻]","[哈哈]","[爱你]","[晕]","[泪]","[馋嘴]","[抓狂]","[哼]","[可爱]");
//定义代替文本数组,下面rep数组和上面myString数组两个要一一对应,否则会出错
var urlArray:Array=new Array();
urlArray.push("",
"",
"",
"",
"",
"",
"",
"",
"",
"");
var text1:TextField=new TextField();
text1.autoSize=TextFieldAutoSize.LEFT;
text1.multiline=true;//允许多行,要
发挥作用就要设置
text1.wordWrap=true;//自动换行,要图片能看就必须要设置
text1.width=stage.stageWidth;//要想看到文字这个要设置
text1.height=stage.stageHeight;//要想看到文字这个要设置
var chang1:urlChange1=new urlChange1();
str1=chang1.Change(str1,faceString,urlArray);
var now:uint=getTimer();
trace(now-old);
trace(str1);
text1.htmlText=str1;
stage.addChild(text1);
AS 3.0 代码
package {
public class urlChange1 {
public function urlChange1() {
// constructor code
}
public function Change(str:String,faceString:Array,urlArray:Array):String
{
var newstr:String;
//定义正则法规,匹配中括号里面汉字
var myPattern:RegExp=//[([/u4e00-/u9fa5]*)/]/g;
//定义搜索到匹配数组保存起来
var pattern:Array=str.match(myPattern);
//使用双循环替换中文字符串
for(var i:int=0;i {
//替换相应的标签,先是找到在myString中的表情的编号,然后找到rep数组对应的图片进行替换
newstr=str.replace(pattern[i],urlArray[faceString.indexOf(pattern[i])]);
//replace方法并没有改变str内容,不赋值的话,只能得到最后一个表情
str=newstr;
}
/*
trace(pattern.length);
trace(pattern);
*/
return newstr;
//用完可以去掉,免得浪费空间
pattern=null;
}
}
}