parallelDo

This commit is contained in:
oc 2018-10-13 13:46:57 +08:00
parent 97739b1e07
commit c3d7910fe4
4 changed files with 72 additions and 2 deletions

View File

@ -175,6 +175,12 @@ functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_leaf": false,
"_type": "object",
"_data": {
"parallelDo": {
"_leaf": true,
"_type": "textarea",
"_lint": true,
"_data": "并行事件处理"
},
"plugin": {
"_leaf": true,
"_type": "textarea",

View File

@ -10,8 +10,6 @@
上述这些默认的事件已经存在处理机制,不需要我们操心。我们真正所需要关心的,其实只是一个自定义的事件。
**本塔中的所有自定义事件能且只能被其他事件触发。不存在RMXP里面那种设置了某个变量为true后一个事件被自动执行的问题。这点和RMXP的区别非常大请务必注意。**
所有事件都存在两种状态:启用和禁用。
- 启用状态下,该事件才处于可见状态,可被触发、交互与处理。
- 禁用状态下该事件相当于不存在,不可见、不可被触发、不可交互。
@ -1467,6 +1465,45 @@ core.insertAction([
- 如果弄不清楚系统trigger和自定义事件等的区别也可以全部覆盖为自定义事件然后通过type:battletype:openDoor等来具体进行控制。
- 多事件处理时请不要使用`changeFloor`那一项,而是使用`events`或者`afterXXX`来处理。
## 并行事件处理
从V2.4.3后H5样板开始支持并行事件处理。
在脚本编辑里面提供了一个parallelDo函数这个函数可以用来做并行处理内容。
``` js
"parallelDo": function (timestamp) {
// 并行事件处理,可以在这里写任何需要并行处理的脚本或事件
// 该函数将被系统反复执行每次执行间隔视浏览器或设备性能而定一般约为16.6ms一次
// 参数timestamp为“从游戏资源加载完毕到当前函数执行时”的时间差以毫秒为单位
// 检查当前是否处于游戏开始状态
if (!core.isPlaying()) return;
// 下面是一个并行事件开门的样例
/*
// 如果某个flag为真
if (core.hasFlag("xxx")) {
// 千万别忘了将该flag清空否则下次仍然会执行这段代码。
core.setFlag("xxx", false);
// 使用insertAction来插入若干自定义事件执行
core.insertAction([
{"type":"openDoor", "loc":[0,0], "floorId": "MT0"}
])
// 也可以写任意其他的脚本代码
}
*/
}
```
该函数将被系统反复执行执行间隔试浏览器或设备性能而定一般约为16.6ms一次。
此函数有个参数timestamp为**从游戏资源加载完毕到当前函数执行时**的时间差,以毫秒为单位。可以使用此参数来制作一些时间相关内容或者特效等。
如果要执行并行的自定义事件请使用if+flag判断的形式然后insertAction将自定义事件插入到事件列表中。
!> 判定flag后千万别忘了将该flag清空否则下次仍然会执行这段代码。
## 加点事件
打败怪物后可以进行加点。

View File

@ -186,6 +186,10 @@ control.prototype.setRequestAnimationFrame = function () {
core.animateFrame.weather.time = timestamp;
}
// 执行用户的并行事件处理内容
functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.plugins.parallelDo(timestamp);
window.requestAnimationFrame(draw);
}
window.requestAnimationFrame(draw);

View File

@ -843,6 +843,29 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
},
"plugins": {
"parallelDo": function (timestamp) {
// 并行事件处理,可以在这里写任何需要并行处理的脚本或事件
// 该函数将被系统反复执行每次执行间隔视浏览器或设备性能而定一般约为16.6ms一次
// 参数timestamp为“从游戏资源加载完毕到当前函数执行时”的时间差以毫秒为单位
// 检查当前是否处于游戏开始状态
if (!core.isPlaying()) return;
// 下面是一个并行事件开门的样例
/*
// 如果某个flag为真
if (core.hasFlag("xxx")) {
// 千万别忘了将该flag清空否则下次仍然会执行这段代码。
core.setFlag("xxx", false);
// 使用insertAction来插入若干自定义事件执行
core.insertAction([
{"type":"openDoor", "loc":[0,0], "floorId": "MT0"}
])
// 也可以写任意其他的脚本代码
}
*/
},
"plugin": function () {
////// 插件编写,可以在这里写自己额外需要执行的脚本 //////