Skip to content

关于公共事件与并行

相关插件

主要插件:

◆Drill_LayerCommandThread 地图-多线程

◆Drill_BattleCommandThread 战斗-多线程

公共事件包含三种分类情况,对应后面章节:多线程执行渠道

如果不仔细区分,很容易混淆概念,该文档需要反复阅读才能理解。

名词索引

以下你可以按住ctrl键点击下面的词,可以直接定位到想了解的名词:

串行与并行串行 并行地图事件 战斗事件 对话框阻塞
公共事件多线程 执行渠道事件指令执行 自身触发条件执行 技能执行 插件执行

串行与并行

定义

串行:是指指令必须按照顺序依次执行,如果途中出现了等待的情况,那么指令都会被阻塞,必须等到 指令完成后 才能执行下一条指令。

(比如地图事件中的 自动执行、确定键 的执行过程。)

并行: 是指指令可以在同一个时间中,分别执行。指令之间相互独立,互不干扰。

(比如地图事件中的 并行处理 的执行过程。)

注意,串行和并行是对于 事件页 而言的,事件页与事件页之间可以并行或串行。事件页自身中的所有指令,都必须从上往下按顺序依次执行。另外,对话框事件指令是特殊的指令体,只要执行对话框,就会强制串行,阻塞其他所有事件的线程,这里的 并行串行 不包含该指令体造成的影响。

事件

地图事件:即地图界面中的事件,在地图中双击即可放置一个事件。

地图事件有行走图、坐标、自主移动、触发条件等各个属性。

战斗事件:即战斗界面中的事件,在敌群中进行设置。

注意,战斗事件没有并行的能力,并且触发条件都是根据战斗阻塞串行的流程进行的。

对话框阻塞

对话框事件指令 是特殊的指令体,

只要执行对话框,就会强制串行,阻塞其他所有事件的线程。

因此,如果你的指令中有 对话框 出现,那么用串行。

如果没有对话框,那么 串行并行 随意。

因为并行中如果使用对话框,会造成数据执行错位的问题。

相反,如果你必须使用并行,那么需要尽可能避免出现对话框的指令。

既是对话框又可以并行的功能插件也有,就是:临时漂浮文字。可以去看看“13.UI > 大家族-漂浮文字.docx”。

触发与时间

1)同一帧的先后顺序

触发的先后顺序,与事件id有关。

假设触发发生在同一帧内,那么:

目标事件id小的触发,会被先执行,

目标事件id大的触发,会被后执行。

进入地图后,程序会从id=1的事件开始,如果这个事件是自动执行的,则加入串行的队列,如果这个事件是并行的,则 并行执行指令 。

2)时间差

串行与并行存在 多个事件 之间的 时间差 的问题。

如果初始化的事件都为串行(自动执行),那么所有串行的事件指令都能够根据id顺序先后执行事件指令。

而并行执行就不一定了。等待指令需要时间、角色移动需要时间、角色转向需要时间、地图淡入淡出也需要时间。如果这些指令使用并行来执行,那么你无法确定哪个事件最先执行完毕,哪个最后执行。

添加等待后,那么触发的先后顺序就发生了改变,因为触发过程与执行处于不同的帧。(”8.物体 > 触发的本质.docx” 文档中也有 触发与时间 的介绍。)

公共事件

多线程

公共事件分成下面两种方式,如下图。

如果不加任何插件,游戏默认支持情况是下面这样的。

(战斗界面无法实现并行)

通过下面插件,能实现 地图界面/战斗界面 的 串行/并行,可见:5)插件执行

◆Drill_LayerCommandThread 地图-多线程

◆Drill_BattleCommandThread 战斗-多线程

执行渠道

1)定义

执行渠道: 指公共事件的执行渠道,分为下图的四种方式。

将 地图界面/战斗界面、串行/并行 继续细分,如下图。

2)事件指令执行

a)添加方法(地图事件)

你可以在地图事件中,添加新的公共事件运行,串行并行与事件设置相关。

b)添加方法(战斗事件)

你可以在战斗事件中,添加新的公共事件运行,但这里只能在战斗界面串行执行。

c)细节说明

简单来说,公共事件在这里相当于一个便捷的函数封装库。

能够封装一系列事件操作。

公共事件中可以有“本事件”的指令,比如开启独立开关操作,“本事件”指向的是执行这个公共事件的地图事件。其它情况下,由于没有“本事件”,所以这些操作无效。

另外,如果你在公共事件中使用插件指令“事件[110]”,

那么对应的事件是你当前所在地图中,id为110的事件。

d)串行与并行

如果事件的设置是自动执行(串行)或其它功能,那么公共事件会阻塞,依次运行。

如果事件的设置是并行处理,那么公共事件与事件指令一起并行运行。

3)自身触发条件执行

a)添加方法

你可以在公共事件自身中,添加触发开关或者并行触发条件。

b)细节说明

必须要设置触发条件,才会执行,

如果触发条件为无,则只能通过 事件指令或技能 来执行。

c)串行与并行

注意,自动执行(串行)和并行处理的功能,只能在地图界面中有效。

F:pg mv箱NO7@9S`GAKR_}0%5T)WG_5.png

4)技能执行

a)添加方法

你可以在技能效果中,添加公共事件执行。

b)细节说明

技能中如果写了多个效果和公共事件,那么先顺序执行效果,再顺序执行公共事件。

这里需要从脚本层面上解析,因为公共事件和一般的hp增减功能不一样:

![C:\Users\lenovo\AppData\Roaming\Tencent\Users\1355126171\QQ\WinTemp\RichOle\X2_7X}P{7]HUK46HVNNHUWG.png](./images/关于公共事件与并行/关于公共事件与并行-020.png)

技能范围确定了多个使用者,所以必须先让使用者顺序执行其它效果,再执行公共事件。

图中的ApplyGlobal即执行公共事件函数。

![C:\Users\lenovo\AppData\Roaming\Tencent\Users\1355126171\QQ\WinTemp\RichOle$I8)[GE{C9EQ3(WT@ZDKCJ.png

如果有多个公共事件,公共事件之间根据顺序排序执行

c)串行与并行

通过技能执行的公共事件无法并行

5)插件执行

通过下面插件,能实现 地图界面/战斗界面 的 串行/并行:

◆Drill_LayerCommandThread 地图-多线程

◆Drill_BattleCommandThread 战斗-多线程

基于多线程的子插件,也能设置 地图界面/战斗界面 的 串行/并行 设置。

子插件功能

【控件 - 主菜单选项按钮管理器】

子插件:

◆Drill_WindowMenuButton 控件 - 主菜单选项按钮管理器

从原理上看,插件的本质是走 事件指令执行 的流程,在地图中创建一个”自动执行”或”并行处理”的事件,并使其执行对应的公共事件。

注意,菜单界面中不能执行公共事件。主菜单选项按钮管理器 的虽然是作用于菜单界面,但是在主菜单的按钮执行后,会立即离开菜单界面,进入地图界面来执行相关公共事件。(在物品界面使用物品公共事件也是一样的原理,会立即回到地图界面执行公共事件。)

贡献者

暂无相关贡献者

页面历史

暂无最近变更历史