CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
界面UI聊天富文本

【界面UI】聊天表情混排:RichText图文混排与历史折叠

2026-09-22 06:42 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本界面UI聊天富文本

实战应用:用在哪里

世界频道一半的消息带着表情,纯文本控件画不出来。RichText让表情图标嵌进文字流自动排版,配合历史折叠策略,聊天框再热闹也不糊屏。

表情占位符的转换

消息里的方括号占位符替换成富文本img标签,单条上限三个表情,超出截断。表情ID经白名单校验防路径注入。

lua
local EMOJI = { [1] = true, [2] = true, [3] = true, [4] = true }
local function toRich(text)
    local cnt = 0
    local s = string.gsub(text, "%[(%d)%]", function(id)
        if EMOJI[tonumber(id)] and cnt < 3 then
            cnt = cnt + 1
            return "<img src='res/chat/emoji/" .. id .. ".png' />"
        end
        return ""
    end)
    return s
end

历史消息的折叠

每条消息新建一个RichText控件追加到聊天层,历史超过十条移除最旧的一条,屏幕只保留最近十行。

lua
local history = {}
SL:RegisterLuaNetMsg(7501, function(data)
    local rich = GUI:RichText_Create(chatLayer, "chat" .. os.clock(), 8, 0, toRich(data.text), 320, 16, { 230, 230, 230 }, 6, nil)
    table.insert(history, rich)
    if #history > 10 then
        local old = table.remove(history, 1)
        GUI:removeFromParent(old)
    end
end)

验证与监控

测试覆盖纯文字、满三表情、超三表情、非法ID四类消息,验证渲染与截断。低端机压测每秒十条连续刷屏,帧率跌破30把折叠上限降到六行。

踩坑记录

RichText的内容在创建时传入,追加式聊天天然适配,编辑已有内容的需求要用重建实现,别找不存在的set接口。img标签的src必须单引号,双引号截断解析;表情ID不走白名单,路径拼接可被构造成越界资源引用。os.clock拼节点名高频下会重名,创建失败静默丢消息,改自增序号。removeFromParent后history里的引用要同步移除,残留引用会让折叠计数虚高,十行上限形同虚设。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

玩法策划悬赏赏金防刷

【玩法策划】悬赏捕杀:悬赏发布与赏金结算

实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…

2026-09-23 10:18 996 技术组 · 0 阅读
工具链配表校验引用

【工具链】配表校验器:数值边界与引用完整性

实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…

2026-09-23 10:18 996 技术组 · 0 阅读
后端接口行会擂台结算

【后端接口】行会擂台:守擂判定的接口实现

实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…

2026-09-23 10:18 996 技术组 · 0 阅读
Lua实战二叉堆排行榜伤害

【Lua实战】二叉堆:伤害排行榜的有序插入

实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…

2026-09-23 10:18 996 技术组 · 0 阅读
网络通信九宫格视野广播

【网络通信】九宫格视野:同屏广播的范围控制

实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…

2026-09-23 10:18 996 技术组 · 0 阅读
安全加密输入校验注入拦截

【安全加密】入库防护:玩家输入的参数校验与拦截

实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…

2026-09-23 10:18 996 技术组 · 0 阅读