NPC 对话是剧情的载体:铁匠的吆喝、村长的嘱托、神秘人的低语——打字机的逐字效果让文字有了语气,选项按钮让对话有了分支。对话框的实现要点是逐字的节奏、选项的呈现与跳过的礼貌。
---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,整行显示完毕停止定时器并呼出选项按钮。点击对话区域的跳过:再点一下立即显示整行(急性子玩家的福音),再次点击翻到下一行——节奏的控制在玩家手里。
---选项按钮:分支的呈现与提交
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 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 新服开放预计首日涌三万新玩家,现有环境从未承受过这种规模。压测脚本模拟登录洪峰:按真实用户的操作时序生成…
实战应用:用在哪里 玩家反馈装备强化后战力没变化,开发排查发现属性计算逻辑在版本更新中被误改了。属性快照表每日存档玩家的核心…
实战应用:用在哪里 支付平台的接口响应从 200 毫秒恶化到 15 秒,调用方因等待超时堆积了大量线程,最终导致整个服务进程…
实战应用:用在哪里 支付平台的回调机制在网络抖动时会重复发送同一笔充值通知,如果服务端不做幂等处理就会重复发放元宝。某月因网…
实战应用:用在哪里 行会活动集中在攻城战,日常缺乏轻量社交场景。行会篝火晚会做行会固定社交活动:每周三、周日晚在行会驻地点燃…
实战应用:用在哪里 矿洞深层的随机塌方事件是高收益高风险的野外玩法:塌方前 60 秒全屏预警,玩家撤离至安全区可躲避伤害,停…