((为澄清起见,我已经阅读了SOOOO的该网站以及其他网站的许多其他帖子,甚至是文档,我只是无法拼凑需要做的事情。。我不是很了解)
我是AS3的菜鸟,但我正在学习,基本上我有一个名为“ text”的字符串,它是您在游戏中的聊天框中发送的任何内容的文本,因此,如果您在游戏中聊天并输入类似“嘿家伙们,请在http://google.com处检查”,整个字符串就是“ text”变量,显然您已经知道,但是无论如何,仍然使用相同的消息作为示例,我基本上希望添加检查以查看“文本”中是否包含“ http”,如果是,则添加EventListener?到那个唯一的“单词”(又称URL)并将其提供给NavigateToURL?动作。
我可以给它NavigateToURL吗?坦白地说,我自己要采取行动,实际上是在检测字符串中是否包含“ http”,并解析该字符串中唯一包含http的单词是否具有EventListener?我可以为整个事件提供事件侦听器,但是他们在URL栏中加载“嗨,伙计们,请在http://google.com处检查一下”显然是不专业的。
我认为不需要任何代码就能真正让你们知道我需要帮助的原因,因为我给出了变量的名称以及我需要完成的工作,但是如果有帮助,这里有一些代码(非接触式,我已删除了我所有的拙劣修改,以便您的专业人员可以应用有效的修改)
我从其他大多数AS3 Clickable-URL检测帖子,正则表达式和其他内容中了解到,但是我100%可以,实际上,如果发送的URL中没有http,则只需要检测http。聊天框,它将不会被单击,就这么简单,我不在乎人们是否键入“ httptroll”,它仍然具有事件侦听器。
这是该类中唯一的函数,也是该函数中调用的ChatMessage类。
public static function make(
name:String,
text:String,
objId:int = -1,
numStars:int = -1,
recipient:String = "",
isToMe:Boolean = false,
tokens:Object = null,
isWhisper:Boolean = false,
nameColor:int = 1193046,
textColor:int = 1193046,
isAdmin:Boolean = false):ChatMessage {
var msg:ChatMessage = new ChatMessage();
msg.name = name;
msg.text = text;
msg.objectId = objId;
msg.numStars = numStars;
msg.admin = isAdmin;
msg.recipient = recipient;
msg.isToMe = isToMe;
msg.isWhisper = isWhisper;
msg.tokens = tokens == null ? {} : tokens;
msg.nameColor = nameColor;
msg.textColor = textColor;
return (msg);
}
这取决于您如何设置该聊天功能,但通常它包含两个主要元素:
[一个文本框,不同用户的所有消息都转到该文本框,另一个文本框,用户可以在其中输入一些文本(可能还有一个实际发送消息的附加按钮)。
现在您可能不知道,但是Flash TextFields能够呈现HTML格式的文本,因为它支持一些基本的HTML标签,例如<font>
<b>
,最重要的是<a>
。
在HTML中,开头<a>
和结束</a>
标记之间的某些内容(文本或图像)被标记为可点击的超链接。它应转到的URL由href=""
属性确定。
因此,返回到您的聊天框,只需用html格式的超链接替换出现在字符串中的链接。
例如
This is my link https://www.startpage.com click it
进入
This is my link <a href="https://www.startpage.com">https://www.startpage.com</a> click it
并将结果设置为动态TextField的。htmlText属性。
当然,可以使用正则表达式来完成,但是最简单的方法是在字符串中搜索http的出现,如果有,请记住该索引并从该位置开始搜索字符串出现空格(表示网址的末尾)。
这是一个简单的示例:
var messages:TextField = new TextField();
messages.width = 400;
messages.height = 200;
messages.border = true;
addChild(messages);
var inputBox:TextField = new TextField();
inputBox.type = TextFieldType.INPUT;
inputBox.width = 400;
inputBox.height = 20;
inputBox.border = true;
inputBox.y = 200;
addChild(inputBox);
inputBox.text = "This is my message https://www.startpage.com and some more text";
messages.htmlText = containsLink(inputBox.text);
private function containsLink(inp:String):String
{
var url:String = "";
var start:int = inp.indexOf("http");
var end:int;
if (start != -1)
{
end = Math.min(inp.length, inp.indexOf(" ", start));
}
url = inp.substring(start, end);
inp = inp.replace(url, "<b><a href='" + url + "'>" + url + "</a></b>");
return inp;
}