FairyGUI 的富文本组件中,支持 UBB 语法,我们可以通过它来很方便设置文本的样式,插入图片,超链接等,进行 图文混排。不过,很多时候内置的标签并不够用,需要我们自定义标签。
1. UBB 常用标签
普通文本不支持语法中的img、url标签,因为普通文本是不可以图文混排的。要支持图文混排,改为使用富文本。
1.1 图片
[img]image_url[/img] 
显示一个图片
这里的 image_url 可以是 ui://包名/图片名 的内部url格式,也可以是一个外部资源的url。
图片最终是通过GLoader显示的,支持外部资源的能力可以参阅GLoader的文档。
在这里无法设置图片大小。如果需要需要设置图片大小,改用HTML语法。
1.2 超链接
[url=link_href]text[/url] 
显示一个超级链接
其中 link_href 可以在链接点击后触发的事件里获得。
1.3 文本
- [b]text[/b]设置文本为粗体。
- [i]text[/i]设置文件为斜体。
- [u]text[/u]设置文本为下划线。
- [color=#FFFFFF]text[/color]设置文本颜色。注意一定要用十六进制颜色代码。
- [size=10]text[/size]设置文本的字体大小。
2. 自定义标签
可以自定义 UBB 标签及解析方式。自定义 UBB 标签,实际上就是自定义一个解析规则,将 UBB 标签转换成一个 html 标签。
首先创建一个类,继承自 fgui.UBBParser ,然后在类里自定义标签及解析规则。示例代码如下:
// 自定义类 EmojiParser 继承自 fgui.UBBParser
export default class EmojiParser extends fgui.UBBParser {
    public constructor() {
        super();
        // 自定义 emoji 标签,及解析函数 onTag_Emoji()
        this._handlers["emoji"] = this.onTag_Emoji;
    }
    
    // tagName: 标签名,如 emoji
    // end: 标签是否结束,有的标签为[xxx][/xxx]两段
    // attr: 标签属性
    private onTag_Emoji(tagName: string, end: boolean, attr: string): string {
        if (!end) {
            // 根据 tagText 去包里获取资源 URL
            let src: string = fgui.UIPackage.getItemURL("Chat", this.getTagText(true));
            if (!src)
                return null;
            return "<img src='" + src + "' />";
        }
        else
            return null;
    }
}使用的时候,
// 如下方式添加 emoji 标签,标签之间的 “hahaha” 为emoji在资源包里的名字
this._input.text += "[emoji]hahaha[/emoji]";
// 标签解析
//this._emojiParser = new EmojiParser();
this._richText.text = this._emojiParser.parse(this._input.text)这样就完成了自定义标签 emoji 的使用了。
[emoji]hahaha[/emoji]
转换成了
<img src='ui://Chat/hahaha' />

此处评论已关闭