Skip to content

关于对话框优化核心

相关插件

插件本体:

◆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]]”有了”持续[]”,脸图在变化一段时间后,会自动变回上一个脸图。

贡献者

暂无相关贡献者

页面历史

暂无最近变更历史
最近更新