wait事件允许多键值和超时时间
This commit is contained in:
parent
77e29f6039
commit
22fca8d25f
@ -2007,15 +2007,17 @@ return code;
|
||||
|
||||
|
||||
wait_s
|
||||
: '等待用户操作并获得按键或点击信息' BGNL? Newline waitContext* BEND Newline
|
||||
: '等待用户操作并获得按键或点击信息' '超时毫秒数' Int BGNL? Newline waitContext* BEND Newline
|
||||
|
||||
|
||||
/* wait_s
|
||||
tooltip : wait: 等待用户操作并获得按键或点击信息
|
||||
helpUrl : https://h5mota.com/games/template/_docs/#/event?id=wait%EF%BC%9A%E7%AD%89%E5%BE%85%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C
|
||||
default : [0]
|
||||
colour : this.soundColor
|
||||
Int_0 = Int_0?(', "timeout": ' + Int_0):'';
|
||||
waitContext_0 = waitContext_0 ? (', "data": [\n' + waitContext_0 + ']') : '';
|
||||
var code = '{"type": "wait"' + waitContext_0 + '},\n';
|
||||
var code = '{"type": "wait"' + Int_0 + waitContext_0 + '},\n';
|
||||
return code;
|
||||
*/;
|
||||
|
||||
@ -2027,13 +2029,16 @@ waitContext
|
||||
|
||||
|
||||
waitContext_1
|
||||
: '按键的场合' '键值' Int BGNL? Newline action+ BEND Newline
|
||||
: '按键的场合' '键值' EvalString BGNL? Newline action+ BEND Newline
|
||||
|
||||
/* waitContext_1
|
||||
tooltip : wait: 等待用户操作并获得按键或点击信息
|
||||
helpUrl : https://h5mota.com/games/template/_docs/#/event?id=wait%EF%BC%9A%E7%AD%89%E5%BE%85%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C
|
||||
colour : this.subColor
|
||||
var code = '{"case": "keyboard", "keycode": ' + Int_0 + ', "action": [\n' + action_0 + ']},\n';
|
||||
if (!/^\d+(,\d+)*$/.test(EvalString_0)) {
|
||||
throw new Error('键值必须是正整数,可以以逗号分隔');
|
||||
}
|
||||
var code = '{"case": "keyboard", "keycode": "' + EvalString_0 + '", "action": [\n' + action_0 + ']},\n';
|
||||
return code;
|
||||
*/;
|
||||
|
||||
@ -3608,7 +3613,7 @@ ActionParser.prototype.parseAction = function() {
|
||||
for(var ii=data.data.length-1,caseNow;caseNow=data.data[ii];ii--) {
|
||||
if (caseNow["case"] == "keyboard") {
|
||||
case_waitList = MotaActionBlocks['waitContext_1'].xmlText([
|
||||
caseNow.keycode || 0, this.insertActionList(caseNow.action), case_waitList
|
||||
caseNow.keycode || "0", this.insertActionList(caseNow.action), case_waitList
|
||||
]);
|
||||
} else if (caseNow["case"] == "mouse") {
|
||||
case_waitList = MotaActionBlocks['waitContext_2'].xmlText([
|
||||
@ -3618,7 +3623,7 @@ ActionParser.prototype.parseAction = function() {
|
||||
}
|
||||
}
|
||||
this.next = MotaActionBlocks['wait_s'].xmlText([
|
||||
case_waitList, this.next]);
|
||||
data.timeout||0,case_waitList, this.next]);
|
||||
break;
|
||||
case "waitAsync": // 等待所有异步事件执行完毕
|
||||
this.next = MotaActionBlocks['waitAsync_s'].xmlText([
|
||||
|
||||
@ -164,8 +164,8 @@ editor_blockly = function () {
|
||||
],
|
||||
'特效/声音':[
|
||||
MotaActionBlocks['sleep_s'].xmlText(),
|
||||
MotaActionFunctions.actionParser.parseList({"type": "wait", "data": [
|
||||
{"case": "keyboard", "keycode": 13, "action": [{"type": "comment", "text": "当按下回车(keycode=13)时执行此事件"}]},
|
||||
MotaActionFunctions.actionParser.parseList({"type": "wait", "timeout": 0, "data": [
|
||||
{"case": "keyboard", "keycode": "13,32", "action": [{"type": "comment", "text": "当按下回车(keycode=13)或空格(keycode=32)时执行此事件"}]},
|
||||
{"case": "mouse", "px": [0,32], "py": [0,32], "action": [{"type": "comment", "text": "当点击地图左上角时执行此事件"}]},
|
||||
]}),
|
||||
MotaActionBlocks['waitAsync_s'].xmlText(),
|
||||
|
||||
@ -438,6 +438,7 @@ actions.prototype._sys_ondown_lockControl = function (x, y, px, py) {
|
||||
|
||||
// --- wait事件也要提供px和py
|
||||
if (core.status.event.id == 'action' && core.status.event.data.type == 'wait') {
|
||||
clearTimeout(core.status.event.interval);
|
||||
core.setFlag('type', 1);
|
||||
core.setFlag('x', x);
|
||||
core.setFlag('y', y);
|
||||
@ -754,6 +755,7 @@ actions.prototype._sys_onmousewheel = function (direct) {
|
||||
|
||||
// wait事件
|
||||
if (core.status.lockControl && core.status.event.id == 'action' && core.status.event.data.type == 'wait') {
|
||||
clearTimeout(core.status.event.interval);
|
||||
core.setFlag('type', 0);
|
||||
var keycode = direct == 1 ? 33 : 34;
|
||||
core.setFlag('keycode', keycode);
|
||||
@ -1046,6 +1048,7 @@ actions.prototype._keyUpAction = function (keycode) {
|
||||
return;
|
||||
}
|
||||
if (core.status.event.data.type == 'wait') {
|
||||
clearTimeout(core.status.event.interval);
|
||||
core.setFlag('type', 0);
|
||||
core.setFlag('keycode', keycode);
|
||||
core.status.route.push("input:" + keycode);
|
||||
|
||||
@ -1951,10 +1951,15 @@ events.prototype._action_wait = function (data, x, y, prefix) {
|
||||
if (core.isReplaying()) {
|
||||
var code = core.status.replay.toReplay.shift();
|
||||
if (code.indexOf("input:") == 0) {
|
||||
var value = parseInt(code.substring(6));
|
||||
core.status.route.push("input:" + value);
|
||||
this.__action_wait_getValue(value);
|
||||
this.__action_wait_afterGet(data);
|
||||
if (code == "input:none") {
|
||||
core.status.route.push("input:none");
|
||||
core.removeFlag("type");
|
||||
} else {
|
||||
var value = parseInt(code.substring(6));
|
||||
core.status.route.push("input:" + value);
|
||||
this.__action_wait_getValue(value);
|
||||
this.__action_wait_afterGet(data);
|
||||
}
|
||||
}
|
||||
else {
|
||||
main.log("录像文件出错!当前需要一个 input: 项,实际为 " + code);
|
||||
@ -1963,6 +1968,12 @@ events.prototype._action_wait = function (data, x, y, prefix) {
|
||||
}
|
||||
core.doAction();
|
||||
return;
|
||||
} else if (data.timeout) {
|
||||
core.status.event.interval = setTimeout(function() {
|
||||
core.status.route.push("input:none");
|
||||
core.removeFlag("type");
|
||||
core.doAction();
|
||||
}, data.timeout);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1994,9 +2005,11 @@ events.prototype.__action_wait_afterGet = function (data) {
|
||||
var todo = [];
|
||||
data.data.forEach(function (one) {
|
||||
if (one["case"] == "keyboard" && core.getFlag("type") == 0) {
|
||||
if (one["keycode"] == core.getFlag("keycode", 0)) {
|
||||
core.push(todo, one.action);
|
||||
}
|
||||
(one.keycode + "").split(",").forEach(function (keycode) {
|
||||
if (core.getFlag("keycode", 0) == keycode) {
|
||||
core.push(todo, one.action);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (one["case"] == "mouse" && one.px instanceof Array
|
||||
&& one.py instanceof Array && core.getFlag("type") == 1) {
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
(已完成!) 6. core.drawAnimate()和对应的事件,建议增加一个boolean型参数来表示坐标是绝对坐标(即当前的实现)还是在视野中的相对坐标(以13*13为例相对坐标总是在0~12之间),以实现形如“在视野正中心播放某某动画”的需求(小地图可以写6,6,大地图怎么办)
|
||||
(已完成!) 7. 建议把core.playBgm(bgm, startTime)的startTime参数在事件中也提供出来,以用于一些演出(比如适当的剧情处直接从高潮开始)。同理可以让“暂停背景音乐”记录下当前播放到了第几秒,并在“恢复背景音乐”中自动从这个秒数恢复。作者还可以手动配合音量渐变效果
|
||||
(已完成!) 8. 系统设置菜单中“音量”和“步时”的点击区并不是根据文本长度自动适配的,这导致作者修改文本(包括但不限于翻译)后玩家难以找到准确的点击区,建议优化
|
||||
9. 建议给“显示选择项”、“显示确认框”、“等待用户操作”这三个事件添加一个“若多少毫秒内不响应则触发的分支”,用来实现一些如新新2的QTE,录像中可以记录“choice: timeout”、“confirm: timeout”和“wait: timeout”来表示触发了超时分支
|
||||
(已完成!) 9. 建议给“显示选择项”、“显示确认框”、“等待用户操作”这三个事件添加一个“若多少毫秒内不响应则触发的分支”,用来实现一些如新新2的QTE,录像中可以记录“choice: timeout”、“confirm: timeout”和“wait: timeout”来表示触发了超时分支
|
||||
10. 建议给“转变图块”事件增加一个淡入时间参数,用于原本是空地或空气墙的情况,目前这种效果必须借助存在安全隐患的红点
|
||||
11. 建议修复勇士后退时跟随者的鬼畜行为,并推出一套能够对跟随者位置和朝向进行读写的API甚至事件,且允许这些信息被计入存档,以实现一些演出效果甚至游戏要素,如新新2用公主占位防冰块
|
||||
12. “设置怪物属性”事件的下拉框目前只支持一部分,另一部分只能通过手敲json再解析来得到,希望提供完整支持
|
||||
@ -21,7 +21,7 @@
|
||||
20. 很多事件对应的脚本有默认参数,但在事件中省略参数却会变成0,建议修复
|
||||
|
||||
图块属性的nopass倒真可以改成勾选框,因为null一定表示不可通行(道具根本没有nopass)
|
||||
|
||||
对话框淡入淡出
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user