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

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

2026-09-23 15:13 作者: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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

引擎触发烈火剑法连击战士

【引擎触发】疾风烈火斩:烈火剑法连击的判定触发设计

实战应用:用在哪里 战士的烈火剑法一击熄火后要等八秒冷却,连招断档感强烈。疾风烈火斩在烈火剑法命中后给一次连击窗口:三秒内再…

2026-09-23 15:45 996 技术组
玩法策划阵营声望声望压制

【玩法策划】阵营声望:声望等级与敌对压制设计

实战应用:用在哪里 阵营对抗打到中期容易疲软:打赢没有额外好处,输掉也没有代价。阵营声望体系给阵营战装上荣誉刻度:个人与阵营…

2026-09-23 15:45 996 技术组
玩法策划城主施政市政建设

【玩法策划】城主施政:市政令牌与城市建设玩法

实战应用:用在哪里 拿下沙巴克之后呢?城主除了名字挂在城墙上,对城市毫无影响。城主施政玩法让占领变成治理:城主每周获得市政令…

2026-09-23 15:45 996 技术组
运维发布备用线路切换演练

【运维发布】备用线路:主线路故障的自动切换演练

实战应用:用在哪里 主线路光缆被挖断的深夜,全服掉线 20 分钟,玩家以为游戏倒闭。备用线路方案给接入层配第二条出口:主线路…

2026-09-23 15:44 996 技术组
后端接口行会选举换届

【后端接口】行会选举:官员换届的投票与任期接口

实战应用:用在哪里 行会官员由帮主任命的老模式弊端明显:任人唯亲、能上不能下。行会选举接口把官员换届做成投票制:每两个月一次…

2026-09-23 15:44 996 技术组
前端接口技能悬浮卡片说明

【前端接口】技能说明悬浮:技能详情卡片的前端实现

实战应用:用在哪里 烈火剑法的伤害加成、冷却时间、下一级提升,全靠玩家记忆或去官网查。技能说明悬浮卡片在鼠标悬停技能图标零点…

2026-09-23 15:44 996 技术组