parallelDo
This commit is contained in:
parent
97739b1e07
commit
c3d7910fe4
@ -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",
|
||||
|
||||
@ -10,8 +10,6 @@
|
||||
|
||||
上述这些默认的事件已经存在处理机制,不需要我们操心。我们真正所需要关心的,其实只是一个自定义的事件。
|
||||
|
||||
**本塔中的所有自定义事件能且只能被其他事件触发。不存在RMXP里面那种,设置了某个变量为true后,一个事件被自动执行的问题。这点和RMXP的区别非常大,请务必注意。**
|
||||
|
||||
所有事件都存在两种状态:启用和禁用。
|
||||
- 启用状态下,该事件才处于可见状态,可被触发、交互与处理。
|
||||
- 禁用状态下该事件相当于不存在,不可见、不可被触发、不可交互。
|
||||
@ -1467,6 +1465,45 @@ core.insertAction([
|
||||
- 如果弄不清楚系统trigger和自定义事件等的区别,也可以全部覆盖为自定义事件,然后通过type:battle,type: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清空!否则下次仍然会执行这段代码。
|
||||
|
||||
## 加点事件
|
||||
|
||||
打败怪物后可以进行加点。
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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 () {
|
||||
////// 插件编写,可以在这里写自己额外需要执行的脚本 //////
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user