关于对话框优化核心
相关插件
插件本体:
◆Drill_CoreOfDialog 对话框 - 对话框优化核心
相关子插件:
◆Drill_DialogNameBox 对话框 - 姓名框窗口
对话框优化核心需要基于 窗口字符核心 才能运行。
并且专门针对对话框,进行窗口字符功能强化。
| 默认对话框 由于底层结构,不支持高级的窗口字符。对话框优化核心 改进了底层结构,已支持高级的窗口字符。(也可以看看 ”对话框的全部结构.png” 了解插件的作用范围) |
对话框
基础功能
基础功能在示例中 对话框管理层 中都有介绍。
你可以去示例中看看。

核心功能
1)原理介绍
| 介绍功能前,先回顾一下什么是 逐个绘制 。 |
文本域:是指绘制窗口字符的区域,文本域具有高度和宽度。
字符如果越出了边界,则会被遮挡。
文本光标:文本域中确定下一个字符位置的竖线。(有时候简称“光标”)
每绘制一个新的字符,光标都会前进到下一个位置,并且光标可以换行。

字符绘制: 每输入一个字符,光标就能向前移动。
常规情况下,绘制所有字符的过程,都在一瞬间内完成。


逐个绘制: 每隔几帧时间,绘制下一个字符,直到绘制完全部字符。
由于绘制有时间差,所以需要实时控制绘制,因此性能消耗也比一次性绘制要大的多。




字符绘制 是一瞬间绘制完毕。
逐个绘制 是一个时间段内,多次绘制。
2)结构组成
| 对话框主要基于 逐个绘制 功能,然后在此基础上,扩展了很多额外功能。 |
对话框的逐个绘制: 专门针对对话框的逐个绘制功能。
对话框在执行 逐个绘制 期间:
》绘制结束前,会持续阻塞事件指令。
》绘制时,可以控制脸图。
》绘制时,可以加窗口字符,要求跳行、等待几帧时间、等待玩家输入。
》绘制结束后,会等待用户按键输入,只有按下确定键后,才执行下一条事件指令。
》……

总的来说,对话框是一个多个功能组合的形态,如下。
对话框 = 逐个绘制 + 指令阻塞 + 子窗口管理 + 脸图管理 + 按键管理
也正是由于 默认对话框 的功能太多太杂,
所以才会分离成 窗口字符核心 和 对话框优化核心 。
以确保其它插件都能支持 逐个绘制,而不会被 对话框 独占。
| 如果不加 窗口字符核心,默认底层只有对话框才能进行逐个绘制。现在基于 窗口字符核心,各类子插件的文本域都可以支持 逐个绘制 功能了。 |
| 默认对话框 由于底层结构,不能直接支持窗口字符。对话框优化核心 改进了底层结构,已支持窗口字符。 |
3)对话框与窗口字符
窗口字符类型分为:** 常规字符 、表达式 、 指代字符 、 效果字符 、 消息输入字符** 。
各类窗口字符在 窗口字符核心、字符绘制核心 中的关系如下图。
由图可知,逐个绘制 与 消息输入字符 密切相关,
而对话框属于逐个绘制的一种情况,专门针对对话框的逐个绘制。
子窗口
对话框包含下面的子窗口。
子窗口 - 金钱窗口
该窗口使用窗口字符:“\$”调出,能够在右上角显示出来。


子窗口 - 选择项窗口
该窗口通过事件指令:【信息】>【显示选项…】调出。

子窗口 - 数字输入窗口
该窗口通过事件指令:【信息】>【数值输入处理…】调出。

子窗口 - 物品选择窗口
该窗口通过事件指令:【信息】>【物品选择处理…】调出。


子窗口 - 姓名框窗口
该窗口需要姓名框窗口插件支持,使用窗口字符:“\dDNB[名称]”显示出姓名窗口。
Drill_DialogNameBox 对话框 - 姓名框窗口


脸图管理
脸图 - 实时切换
窗口字符提供了”\fc[]、\fa[]、fp[]”用于实时切换脸图,如下。
| 窗口字符 | 描述 |
| \fc[资源名:1] | 对话框中,换成"资源名"脸图。参数2为脸图索引,索引从0开始计数,范围为0~7。 |
| \fc[资源名:1:持续[15]] | 对话框中,换成"资源名"脸图。参数2为脸图索引,参数3为脸图持续时间。 |
| \fa[5] | 对话框中,换成第n个角色脸图。(角色从1开始计数) |
| \fa[5:0] | 对话框中,换成第n个角色脸图。参数2为脸图索引,索引从0开始计数,范围为0~7。 |
| \fa[5:0:持续[15]] | 对话框中,换成第n个角色脸图。参数2为脸图索引,参数3为脸图持续时间。 |
| \fp[-2] | 对话框中,换成玩家队员脸图。(-2表示领队,1表示第一个跟随者) |
| \fp[-2:0] | 对话框中,换成玩家队员脸图。参数2为脸图索引,索引从0开始计数,范围为0~7。 |
| \fp[-2:0:持续[15]] | 对话框中,换成玩家队员脸图。参数2为脸图索引,参数3为脸图持续时间。 |
另外,使用脸图的字符时,注意问题:脸图切换不生效 。
| 窗口字符换了脸图后,一直有效,不会变回。如果你只想暂时改变脸图,可以加参数 "持续[]"。即持续时间结束后,自动变回前一个绘制的脸图。 |
脸图 - 局限性
按照绘制规则,脸图无法做成动图。
因此只能在 逐个绘制 过程中,
去掉之前的脸图,然后重新画上新脸图,用于表现表情变化。

脸图 - 资源管理
使用窗口字符“\fc[资源名:1]”可以切换任意的固定头像。
但是如果是与 角色 相关的头像,比如“\fa[5:0]”。
那么要注意表情分配,如下图,每个角色只能配置一个脸图资源。

这个角色对应的资源,只有8个表情可以分配。
以量子妹为例,分成下图的固定的喜怒哀乐。

举个例子,假设队伍中有三个人,量子妹、珍妮、伦琴。如果有这样一段剧情,玩家领队会在一个集市里,尝尝草莓,结果草莓是坏的,悲伤。那么,“玩家领队”,量子妹、珍妮、伦琴三人都可能会成为领队。这时候,播放对话框的内容,就需要播放“\fp[1:0]”的头像。而悲伤,就对应了头像“\fp[1:6]”。(八个表情为0~7的编号)实际效果可以去看看示例。![]() |
按键管理
按键 - 长按加速
游戏默认机制中,一直按住确定键,地图界面会加速,默认为两倍速。
你可以用下面的插件能够对其进一步控制:
◆Drill_LayerRunningSpeed 地图 - 长按加速控制
插件指令如下。

| 长按加速,不仅能加速对话框,还能加速地图界面的所有事件。 |
按键 - 连按立即显示
连按立即显示: 即对话框被打开后,字符会一个一个显示,如果这时再按一次确定键,那么当前对话页内的全部剩余文本,会立即显示出来。
但如果剩余文本中,遇到了等待字符,则会停下。


【对话框 - 对话加速键】
插件提供了对话框加速的功能。
◆Drill_DialogMessageFastSkip 对话框 - 对话加速键
对话加速键: 对话框播放时,按住该键,能够快速跳过所有对话框的对话。
(默认加速键即 ”下一页”逻辑按键,即W键或S键)
你也可以通过插件指令手动开关对话加速键的功能。

并且前面提及的 按键 - 连按立即显示 ,也能通过插件指令控制开启关闭。
由于对话加速键跳的速度太快了,你可以考虑这样设计:
玩家一周目时,关闭对话加速键,玩家二周目以后,启用对话加速键。
加速键有很多类似的插件,这些被整合到:“1.系统 > 关于输入设备核心(高级篇).docx”的 所有加速键 章节。 |
【对话框 - 对话自动播放】
插件提供了对话框自动播放的功能。
◆Drill_DialogMessageAutoPlay 对话框 - 对话自动播放
对话自动播放: 指对话框播放结束时,等一段时间后,自动进入下一页对话。
这个过程本质就是系统自动帮助按确认键。

你可以通过插件指令手动开关对话自动播放的功能。

| 该插件未提供自动播放的按钮,需要你自己用 按钮插件+公共事件 做一个按钮来实现。 |
常见问题(FAQ)
脸图切换不生效
| 问题名称 | 脸图切换不生效 |
| 问题图示 | ![]() |
| 问题描述 | 按照上图的配置,打算隔一段时间换一次脸图。但是不生效。 |
| 出现时机 | > 只要按照上面的写法就会出问题,示例中也一样。 |
| 原理解析 | 由于窗口字符底层,区分了:常规字符、表达式、指代字符、效果字符、消息输入字符而其中的 效果字符、消息输入字符,由于不绘制文本,所以在处理时会被折叠。比如3个等待15帧的字符\.\.\. 会被折叠处理为 等待45帧 的功能。而图中的\fc[]和\.是效果字符和消息输入字符,所以连着写就被折叠了。 |
| 解决方案 | 》按照下图,在适当位置添加一个空格即可。(空格是常规字符,会被绘制出来) 》如果你只是临时改变表情,可以使用窗口字符:(见脸图 - 实时切换)“\fc[资源名:1:持续[15]]”有了”持续[]”,脸图在变化一段时间后,会自动变回上一个脸图。 |


》如果你只是临时改变表情,可以使用窗口字符:(见