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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
学员常见误区 Lua函数可返回多个值,学员用固定变量数接收时如果变量少于返回值,多余返回值被静默丢弃;如果变量多于返回值,多…
设计初衷 行会建筑的死穴是一次全解锁:会员没有逐步建设的过程感。梯度设计让每栋建筑都有前置条件和资源门槛。 数值模型 建筑分…
设计初衷 婚姻系统的属性加成是社交玩法的经济锚点:加成太弱没人结婚,太强则"为了属性被迫结婚"扭曲了社交本质。婚姻边界的设计…
设计初衷 宝箱类玩法的信任危机都源于同一句话:"概率是不是骗人的。"期望公示把概率从事后争议变成事前契约:奖池概率表全量公示…
设计初衷 流拍物(拍卖未成交的退回物品)堆积在卖家背包里成为死资产:低价值物流拍后无人问津,高价值物流拍后卖家不愿降价重拍。…
业务场景 沙巴克战功榜每周结算,玩家提交战功前不知道"再打多少能进前 10、前 10 的奖励是什么"。名次预览:输入自己的战…