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

【界面UI】NPC 对话框:打字机效果与选项按钮

2026-09-23 17:04 作者:996 技术组 996引擎Lua教程传奇脚本

实战应用:用在哪里

NPC 对话是剧情的载体:铁匠的吆喝、村长的嘱托、神秘人的低语——打字机的逐字效果让文字有了语气,选项按钮让对话有了分支。对话框的实现要点是逐字的节奏、选项的呈现与跳过的礼貌。

打字机的效果

lua
---NPC 对话:逐字显示的打字机
Dialog.lines = {}
Dialog.lineIdx = 1
Dialog.charIdx = 0

function Dialog.start(npcName, lines)
    Dialog.lines = lines
    Dialog.lineIdx = 1
    Dialog.charIdx = 0
    GUI:Text_Create(Dialog.win, "npc_name", 10, 8, 13,
        "#FFAA00", npcName)
    Dialog.label = GUI:Text_Create(Dialog.win, "text",
        10, 34, 12, "#FFFFFF", "")
    SL:Schedule(0.04, Dialog.typeNext)
end

function Dialog.typeNext()
    local line = Dialog.lines[Dialog.lineIdx]
    if not line then return end
    Dialog.charIdx = Dialog.charIdx + 1
    GUI:Text_setString(Dialog.label,
        line:sub(1, Dialog.charIdx))
    if Dialog.charIdx >= #line then
        Dialog.showOptions()
        SL:StopSchedule(Dialog.typeNext)
    end
end

打字机以 40 毫秒一字的速度呈现对话:文字逐个浮现,NPC 的语气在节奏里传递——节奏的快慢就是情绪的标点。逐字的驱动用统一的 Schedule,整行显示完毕停止定时器并呼出选项按钮。点击对话区域的跳过:再点一下立即显示整行(急性子玩家的福音),再次点击翻到下一行——节奏的控制在玩家手里。

选项的呈现

lua
---选项按钮:分支的呈现与提交
function Dialog.showOptions()
    local opts = Dialog.current.options or {}
    for i, opt in ipairs(opts) do
        local btn = GUI:Button_Create(Dialog.win,
            "opt" .. i, 10, 120 + (i - 1) * 36)
        GUI:Button_setTitleText(btn, opt.text)
        GUI:addOnClickEvent(btn, function()
            SL:SendNetMsg(MSGID.NPC_OPTION,
                Dialog.npcId, opt.idx, 0, "")
            Dialog.close()
        end)
    end
end

选项按钮按服务器的分支下发渲染:每个按钮绑定分支编号,点击提交编号由服务器路由到对应的剧情线——分支的裁决权在服务器,客户端只做呈现。选项的文案避免剧透后果:「问问关于宝藏的传闻」比「选择帮助他」更有悬念。对话窗口的位置避让 NPC 的模型,文字的宽度自动换行,长对话的滚动让剧情不挤成一团。对话中的战斗触发:某些选项直接引战斗(拒绝强盗的勒索),窗口关闭与战斗的入场无缝衔接。

验证与监控

打字机的节奏与跳过率统计:跳过率高说明文案过长或节奏过慢;选项的分支分布数据反哺剧情的设计,冷门的分支检查可达性。

踩坑记录

打字机的定时器曾经在跳过后仍运行,文字与选项重叠显示,定时器的停止与跳过分支绑定。选项按钮曾经被长文案撑出窗口,按钮的高度自适应文案的行数。对话的中文截断曾经按字节切分,半个汉字显示为乱码,按 UTF-8 字符边界切分。

上线要点

对话的文案进配置表,剧情策划自助维护。打字机的速度三档可调:玩家在设置里选择沉浸、标准、快速。重要的剧情选项支持回看:对话历史在窗口内上翻,选择的脉络可追。

作者履历与出处

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

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

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

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

入门夯实996引擎

【入门夯实】多重返回值:select计数与函数返回值语义

学员常见误区 Lua函数可返回多个值,学员用固定变量数接收时如果变量少于返回值,多余返回值被静默丢弃;如果变量多于返回值,多…

2026-09-24 18:19 996 技术组
策划架构996引擎

【策划架构】行会建筑:功能解锁的梯度设计

设计初衷 行会建筑的死穴是一次全解锁:会员没有逐步建设的过程感。梯度设计让每栋建筑都有前置条件和资源门槛。 数值模型 建筑分…

2026-09-24 18:19 996 技术组
策划架构996引擎

【策划架构】婚姻边界:属性加成的平衡线设计

设计初衷 婚姻系统的属性加成是社交玩法的经济锚点:加成太弱没人结婚,太强则"为了属性被迫结婚"扭曲了社交本质。婚姻边界的设计…

2026-09-24 18:19 996 技术组
策划架构996引擎

【策划架构】宝箱公示:开启期望值的公示设计

设计初衷 宝箱类玩法的信任危机都源于同一句话:"概率是不是骗人的。"期望公示把概率从事后争议变成事前契约:奖池概率表全量公示…

2026-09-24 18:19 996 技术组
策划架构996引擎

【策划架构】流拍处理:拍卖流拍物的定向处理设计

设计初衷 流拍物(拍卖未成交的退回物品)堆积在卖家背包里成为死资产:低价值物流拍后无人问津,高价值物流拍后卖家不愿降价重拍。…

2026-09-24 18:19 996 技术组
进阶实战996引擎

【进阶实战】战功预览:名次定位与奖励映射展示

业务场景 沙巴克战功榜每周结算,玩家提交战功前不知道"再打多少能进前 10、前 10 的奖励是什么"。名次预览:输入自己的战…

2026-09-24 18:19 996 技术组