From d702ef4d3fb2e334d603441fd2fb53536340ac66 Mon Sep 17 00:00:00 2001 From: oc Date: Sun, 30 Dec 2018 01:44:53 +0800 Subject: [PATCH] flag:px & flag:py --- docs/event.md | 4 ++-- docs/personalization.md | 2 +- libs/actions.js | 23 +++++++++++++++++++---- libs/events.js | 17 ++++++++++++++--- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/docs/event.md b/docs/event.md index f5815ed1..3da95ef6 100644 --- a/docs/event.md +++ b/docs/event.md @@ -1647,7 +1647,7 @@ choices为一个数组,其中每一项都是一个选项列表。 当用户执行操作后: - 如果是键盘的按键操作,则会将flag:type置为0,并且把flag:keycode置为刚刚按键的keycode。 -- 如果是屏幕的点击操作,则会将flag:type置为1,并且设置flag:x和flag:y为刚刚的点击坐标。 +- 如果是屏幕的点击操作,则会将flag:type置为1,并且设置flag:x和flag:y为刚刚的点击坐标(0-12之间),flag:px和flag:py置为刚刚的像素坐标(0-415之间)。 下面是一个while事件和wait合并使用的例子,这个例子将不断接收用户的点击或按键行为,并输出该信息。 如果用户按下了ESC或者点击了屏幕正中心,则退出循环。 @@ -1667,7 +1667,7 @@ choices为一个数组,其中每一项都是一个选项列表。 } ], "false": [ // flag:type==1,鼠标点击 - "你当前点击屏幕了,坐标是[${flag:x},${flag:y}]", + "你当前点击屏幕了,位置坐标是[${flag:x},${flag:y}],像素坐标是[${flag:px},${flag:py}]", {"type": "if", "condition": "flag:x==6 && flag:y==6", // 点击(6,6) "true": [{"type": "break"}], // 跳出循环 "false": [] diff --git a/docs/personalization.md b/docs/personalization.md index 79ae26eb..2eec42dc 100644 --- a/docs/personalization.md +++ b/docs/personalization.md @@ -951,7 +951,7 @@ this.getAchievements = function () { - **`flag:hatred`**: 当前的仇恨数值。 - **`flag:commonTimes`**: 全局商店共用次数时的访问次数。 - **`flag:input`**: 接受用户输入的事件后,存放用户输入的结果。 -- **`flag:type`**, **`flag:keycode`**, **`flag:x`**, **`flag:y`**: 等待用户操作后,用户的操作类型,按键keycode或点击坐标。 +- **`flag:type`**, **`flag:keycode`**, **`flag:x`**, **`flag:y`**, **`flag:px`**, **`flag:py`**: 等待用户操作后,用户的操作类型,按键keycode或点击/像素坐标。 - **`flag:skill`**, **`flag:skillName`**: 开启的技能编号和技能名。 - **`flag:heroIcon`**: 当前的勇士行走图名称。 - **`flag:saveEquips`**: 快速换装时保存的套装。 diff --git a/libs/actions.js b/libs/actions.js index 1e54d657..e4878e48 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -329,16 +329,29 @@ actions.prototype.keyUp = function(keyCode, altKey, fromReplay) { actions.prototype.ondown = function (loc) { if (this.checkReplaying()) return; + var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); + var px = parseInt(loc.x/core.domStyle.scale), py = parseInt(loc.y/core.domStyle.scale); + // 画板 if (core.status.played && (core.status.event||{}).id=='paint') { - this.ondownPaint(loc.x/core.domStyle.scale, loc.y/core.domStyle.scale); + this.ondownPaint(px, py); return; } - var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); - if (!core.status.played || core.status.lockControl) { - this.onclick(x, y, []); + + if (!this.checkReplaying() && core.status.event.id=='action' && core.status.event.data.type=='wait') { + core.setFlag('type', 1); + core.setFlag('x', x); + core.setFlag('y', y); + core.setFlag('px', px); + core.setFlag('py', py); + core.status.route.push("input:"+(1000000+1000*px+py)); + core.doAction(); + } + else { + this.onclick(x, y, []); + } if (core.timeout.onDownTimeout==null) { core.timeout.onDownTimeout = setTimeout(function () { if (core.interval.onDownInterval == null) { @@ -789,6 +802,7 @@ actions.prototype.clickAction = function (x,y) { core.doAction(); return; } + /* if (core.status.event.data.type=='wait') { core.setFlag('type', 1); core.setFlag('x', x); @@ -797,6 +811,7 @@ actions.prototype.clickAction = function (x,y) { core.doAction(); return; } + */ if (core.status.event.data.type=='choices') { // 选项 diff --git a/libs/events.js b/libs/events.js index 779f9e2c..fb338d1c 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1188,10 +1188,21 @@ events.prototype.doAction = function() { if (code.indexOf("input:")==0) { var value = parseInt(code.substring(6)); core.status.route.push("input:"+value); - if (value>=10000) { + if (value>=1000000) { core.setFlag('type', 1); - core.setFlag('x', parseInt((value-10000)/100)); - core.setFlag('y', value%100); + var px = parseInt((value-1000000)/1000), py = value%1000; + core.setFlag('px', px); + core.setFlag('py', py); + core.setFlag('x', parseInt(px/32)); + core.setFlag('y', parseInt(py/32)); + } + else if (value>=10000) { + core.setFlag('type', 1); + var x = parseInt((value-10000)/100), y = value%100; + core.setFlag('px', 32*x+16); + core.setFlag('py', 32*y+16); + core.setFlag('x', x); + core.setFlag('y', y); } else { core.setFlag('type', 0);