From c07cf7cc6d040546ba4c44b3ce19e07e47a5ce46 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 1 Sep 2021 17:04:35 +0800 Subject: [PATCH] =?UTF-8?q?=E9=95=BF=E6=8C=89=E6=8B=96=E5=8A=A8=E5=A4=A7?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _docs/api.md | 3 - _docs/script.md | 16 +- _server/CodeMirror/defs.js | 4 - libs/actions.js | 404 +++++++++++++++++---------------- libs/control.js | 8 +- libs/core.js | 7 + project/materials/keyboard.png | Bin 27646 -> 27581 bytes runtime.d.ts | 3 - 8 files changed, 227 insertions(+), 218 deletions(-) diff --git a/_docs/api.md b/_docs/api.md index b2493a82..a128c81c 100644 --- a/_docs/api.md +++ b/_docs/api.md @@ -317,9 +317,6 @@ status: 只能为 stop, leftFoot 和 rightFoot,不填用stop。 offset: 相对主角逻辑位置的偏移量,不填视为无偏移。 frame: 绘制的第几帧 -fillPosWithPoint: fn(pos?: ?) -显示离散的寻路点 - gatherFollowers: fn() 立刻聚集所有的跟随者 diff --git a/_docs/script.md b/_docs/script.md index 3c5495cb..e6333c5f 100644 --- a/_docs/script.md +++ b/_docs/script.md @@ -215,7 +215,7 @@ function () { ``` registerAction: fn(action: string, name: string, func: string|fn(params: ?), priority?: number) 此函数将注册一个用户交互行为。 -action: 要注册的交互类型,如 ondown, onclick, keyDown 等等。 +action: 要注册的交互类型,如 ondown, onup, keyDown 等等。 name: 你的自定义名称,可被注销使用;同名重复注册将后者覆盖前者。 func: 执行函数。 如果func返回true,则不会再继续执行其他的交互函数;否则会继续执行其他的交互函数。 @@ -228,8 +228,8 @@ priority: 优先级;优先级高的将会被执行。此项可不填,默认 ```js // 当flag:abc是true时,点击屏幕左上角可以使用道具破墙镐 -// 注入一个 onclick 事件,名称为 my_pickaxe -core.registerAction('onclick', 'my_pickaxe', function (x, y, px, py) { +// 注入一个 ondown 事件,名称为 my_pickaxe +core.registerAction('ondown', 'my_pickaxe', function (x, y, px, py) { // 如果当前正在执行某个事件,则忽略之。 if (core.status.lockControl) return false; // 如果勇士正在行走中,则忽略之。 @@ -251,7 +251,7 @@ core.registerAction('onclick', 'my_pickaxe', function (x, y, px, py) { }, 100); // 当你不再需要上述监听时,可以通过下面这一句取消注入。 -// core.unregisterActon('onclick', 'my_pickaxe'); +// core.unregisterActon('ondown', 'my_pickaxe'); ``` 下面是另一个例子: @@ -339,12 +339,8 @@ core.registerAction('longClick', 'my_shop', '_my_shop_longClick', 100); - 如果是触摸屏,则只有手指按下滑动时才会触发`onmove`(并不存在什么悬浮的说法)。 - `onup`: 当屏幕被鼠标或手指放开时 - 对应的函数参数:`function (x, y, px, py)`,为此时放开时的格子坐标和像素坐标。 -- `onclick`: 当屏幕被鼠标或手机点击时 - - 对应的函数参数:`function (x, y, px, py, stepPostfix)`,为此时点击的格子坐标、像素坐标,和拖动路径 - - 此函数会在两种情况下被调用: - - 在锁定状态下(即角色不可以自由移动),会在`ondown`时直接触发`onclick`,此时`stepPostfix`为空数组。 - - 在自由状态下(即角色可以自由移动),会在`onup`时触发`onclick`;此时`stepPostfix`为拖动寻路的路径数组。 - - 推荐自定义的点击监听都使用`ondown`处理。 +- `onclick` 【已废弃】 + - 从V2.8.2起,此交互已被废弃,注册一个`onclick`会被直接转发至`ondown`。 - `onmousewheel`: 当鼠标滚轮滚动时 - 对应的函数参数:`function (direct)`,为此时滚轮方向。向下滚动是-1,向上滚动是1。 - 目前在楼传、怪物手册、存读档、浏览地图等多个地方绑定了鼠标滚轮事件。 diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js index 9ecbfc5a..96279c20 100644 --- a/_server/CodeMirror/defs.js +++ b/_server/CodeMirror/defs.js @@ -2343,10 +2343,6 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "连续行走
例如:core.setAutoHeroMove([{direction: \"up\", step: 1}, {direction: \"left\", step: 3}]); // 上左左左
steps: 压缩的步伐数组,每项表示朝某方向走多少步", "!type": "fn(steps: [?])" }, - "fillPosWithPoint": { - "!doc": "显示离散的寻路点", - "!type": "fn(pos?: ?)" - }, "unregisterResize": { "!doc": "注销一个resize函数", "!type": "fn(name: string)" diff --git a/libs/actions.js b/libs/actions.js index f6cb78ea..08d127a5 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -47,17 +47,13 @@ actions.prototype._init = function () { // --- onup注册 this.registerAction('onup', '_sys_checkReplay', this._sys_checkReplay, 100); this.registerAction('onup', '_sys_onup', this._sys_onup, 0); - // --- onclick注册 - this.registerAction('onclick', '_sys_checkReplay', this._sys_checkReplay, 100); - this.registerAction('onclick', '_sys_onclick_lockControl', this._sys_onclick_lockControl, 50); - this.registerAction('onclick', '_sys_onclick', this._sys_onclick, 0); + // --- onclick已废弃,将视为ondown // --- onmousewheel注册 this.registerAction('onmousewheel', '_sys_onmousewheel', this._sys_onmousewheel, 0); // --- keyDownCtrl注册 this.registerAction('keyDownCtrl', '_sys_keyDownCtrl', this._sys_keyDownCtrl, 0); // --- longClick注册 this.registerAction('longClick', '_sys_longClick_lockControl', this._sys_longClick_lockControl, 50); - this.registerAction('longClick', '_sys_longClick', this._sys_longClick, 0); // --- onStatusBarClick注册 this.registerAction('onStatusBarClick', '_sys_onStatusBarClick', this._sys_onStatusBarClick, 0); @@ -66,7 +62,7 @@ actions.prototype._init = function () { ////// 注册一个用户交互行为 ////// /* * 此函数将注册一个用户交互行为。 - * action:要注册的交互类型,如 ondown, onclick, keyDown 等等。 + * action:要注册的交互类型,如 ondown, onup, keyDown 等等。 * name:你的自定义名称,可被注销使用;同名重复注册将后者覆盖前者。 * func:执行函数。 * priority:优先级;优先级高的将会被执行。此项可不填,默认为0。 @@ -75,6 +71,8 @@ actions.prototype._init = function () { actions.prototype.registerAction = function (action, name, func, priority) { if (!name || !func) return; + // 将onclick视为ondown处理 + if (action == 'onclick') action = 'ondown'; priority = priority || 0; if (!this.actions[action]) { this.actions[action] = []; @@ -90,6 +88,8 @@ actions.prototype.registerAction = function (action, name, func, priority) { ////// 注销一个用户交互行为 ////// actions.prototype.unregisterAction = function (action, name) { + // 将onclick视为ondown处理 + if (action == 'onclick') action = 'ondown'; if (!this.actions[action]) return; this.actions[action] = this.actions[action].filter(function (x) { return x.name != name; @@ -462,176 +462,6 @@ actions.prototype.ondown = function (loc) { actions.prototype._sys_ondown_lockControl = function (x, y, px, py) { if (core.status.played && !core.status.lockControl) return false; - core.actions.onclick(x, y, px, py, []); - - // --- 长按判定 - if (core.timeout.onDownTimeout == null) { - core.timeout.onDownTimeout = setTimeout(function () { - if (core.interval.onDownInterval == null) { - core.interval.onDownInterval = setInterval(function () { - if (!core.actions.longClick(x, y, px, py)) { - clearInterval(core.interval.onDownInterval); - core.interval.onDownInterval = null; - } - }, 40) - } - }, 500); - } - return true; -} - -actions.prototype._sys_ondown = function (x, y, px, py) { - core.status.downTime = new Date(); - core.deleteCanvas('route'); - var pos = {'x': x, 'y': y} - core.status.stepPostfix = []; - core.status.stepPostfix.push(pos); - core.fillPosWithPoint(pos); -} - -////// 当在触摸屏上滑动时 ////// -actions.prototype.onmove = function (loc) { - 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); - this.doRegisteredAction('onmove', x, y, px, py); -} - -actions.prototype._sys_onmove_choices = function (x, y) { - if (!core.status.lockControl) return false; - - switch (core.status.event.id) { - case 'action': - if (core.status.event.data.type == 'choices') { - this._onMoveChoices(x, y); - return true; - } - if (core.status.event.data.type == 'confirm') { - this._onMoveConfirmBox(x, y); - return true; - } - break; - case 'selectShop': - case 'switchs': - case 'switchs-sounds': - case 'switchs-display': - case 'switchs-action': - case 'notes': - case 'settings': - case 'syncSave': - case 'syncSelect': - case 'localSaveSelect': - case 'storageRemove': - case 'replay': - case 'gameInfo': - this._onMoveChoices(x, y); - return true; - case 'confirmBox': - this._onMoveConfirmBox(x, y); - return true; - default: - break; - } - return false; -} - -actions.prototype._sys_onmove = function (x, y) { - if ((core.status.stepPostfix || []).length > 0) { - var pos = {'x': x, 'y': y}; - var pos0 = core.status.stepPostfix[core.status.stepPostfix.length - 1]; - var directionDistance = [pos.y - pos0.y, pos0.x - pos.x, pos0.y - pos.y, pos.x - pos0.x]; - var max = 0, index = 4; - for (var ii = 0; ii < 4; ii++) { - if (directionDistance[ii] > max) { - index = ii; - max = directionDistance[ii]; - } - } - pos = [{'x': 0, 'y': 1}, {'x': -1, 'y': 0}, {'x': 0, 'y': -1}, {'x': 1, 'y': 0}, false][index] - if (pos) { - pos.x += pos0.x; - pos.y += pos0.y; - core.status.stepPostfix.push(pos); - core.fillPosWithPoint(pos); - } - } - return true; -} - -////// 当点击(触摸)事件放开时 ////// -actions.prototype.onup = function (loc) { - 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); - this.doRegisteredAction('onup', x, y, px, py); -} - -actions.prototype._sys_onup = function () { - clearTimeout(core.timeout.onDownTimeout); - core.timeout.onDownTimeout = null; - clearInterval(core.interval.onDownInterval); - core.interval.onDownInterval = null; - - if ((core.status.stepPostfix || []).length == 0) return false; - - var stepPostfix = []; - var direction = {'0': {'1': 'down', '-1': 'up'}, '-1': {'0': 'left'}, '1': {'0': 'right'}}; - for (var ii = 1; ii < core.status.stepPostfix.length; ii++) { - var pos0 = core.status.stepPostfix[ii - 1]; - var pos = core.status.stepPostfix[ii]; - stepPostfix.push({ - 'direction': direction[pos.x - pos0.x][pos.y - pos0.y], - 'x': pos.x + parseInt(core.bigmap.offsetX / 32), - 'y': pos.y + parseInt(core.bigmap.offsetY / 32) - }); - } - var posx = core.status.stepPostfix[0].x; - var posy = core.status.stepPostfix[0].y; - core.status.stepPostfix = []; - if (!core.status.lockControl) { - core.clearMap('ui'); - } - - // 长按 - if (!core.status.lockControl && stepPostfix.length == 0 && core.status.downTime != null && new Date() - core.status.downTime >= 1000) { - core.actions.longClick(posx, posy, 32 * posx + 16, 32 * posy + 16); - } - else { - //posx,posy是寻路的目标点,stepPostfix是后续的移动 - core.actions.onclick(posx, posy, 32 * posx + 16, 32 * posy + 16, stepPostfix); - } - core.status.downTime = null; - return true; -} - -////// 获得点击事件相对左上角的坐标 ////// -actions.prototype._getClickLoc = function (x, y) { - - var statusBar = {'x': 0, 'y': 0}; - var size = 32; - size = size * core.domStyle.scale; - - if (core.domStyle.isVertical) { - statusBar.x = 3; - statusBar.y = core.dom.statusBar.offsetHeight + 3; - } - else { - statusBar.x = core.dom.statusBar.offsetWidth + 3; - statusBar.y = 3; - } - - var left = core.dom.gameGroup.offsetLeft + statusBar.x; - var top = core.dom.gameGroup.offsetTop + statusBar.y; - var loc = {'x': Math.max(x - left), 'y': Math.max(y - top, 0), 'size': size}; - return loc; -} - -////// 具体点击屏幕上(x,y)点时,执行的操作 ////// -actions.prototype.onclick = function (x, y, px, py, stepPostfix) { - // console.log("Click: (" + x + "," + y + ")"); - return this.doRegisteredAction('onclick', x, y, px, py, stepPostfix || []); -} - -actions.prototype._sys_onclick_lockControl = function (x, y, px, py) { - if (!core.status.lockControl) return false; switch (core.status.event.id) { case 'centerFly': this._clickCenterFly(x, y, px, py); @@ -720,15 +550,210 @@ actions.prototype._sys_onclick_lockControl = function (x, y, px, py) { core.ui.closePanel(); break; } + + // --- 长按判定 + if (core.timeout.onDownTimeout == null) { + core.timeout.onDownTimeout = setTimeout(function () { + if (core.interval.onDownInterval == null) { + core.interval.onDownInterval = setInterval(function () { + if (!core.actions.longClick(x, y, px, py)) { + clearInterval(core.interval.onDownInterval); + core.interval.onDownInterval = null; + } + }, 40) + } + }, 500); + } return true; } -actions.prototype._sys_onclick = function (x, y, px, py, stepPostfix) { - // 寻路 - core.setAutomaticRoute(x + parseInt(core.bigmap.offsetX / 32), y + parseInt(core.bigmap.offsetY / 32), stepPostfix); +actions.prototype._sys_ondown = function (x, y, px, py) { + if (core.status.lockControl) return false; + core.status.downTime = new Date(); + core.deleteCanvas('route'); + var pos = {'x': parseInt((px + core.bigmap.offsetX) / 32), 'y': parseInt((py + core.bigmap.offsetY) / 32)}; + core.status.stepPostfix = []; + core.status.stepPostfix.push(pos); + core.fillRect('ui', pos.x*32+12-core.bigmap.offsetX,pos.y*32+12-core.bigmap.offsetY,8,8, '#bfbfbf'); + + clearTimeout(core.timeout.onDownTimeout); + core.timeout.onDownTimeout = null; + core.status.preview.prepareDragging = false; + if (!core.hasFlag('__lockViewport__') && (core.status.thisMap.width > core.__SIZE__ || core.status.thisMap.height > core.__SIZE__)) { + core.status.preview.prepareDragging = true; + core.status.preview.px = px; + core.status.preview.py = py; + core.timeout.onDownTimeout = setTimeout(function () { + core.clearMap('ui'); + core.status.preview.prepareDragging = false; + core.status.preview.enabled = true; + core.status.preview.dragging = true; + core.drawTip('已进入预览模式,可直接拖动大地图'); + console.log('已进入预览模式,可直接拖动大地图'); + core.status.stepPostfix = []; + }, 1200); + } +} + +////// 当在触摸屏上滑动时 ////// +actions.prototype.onmove = function (loc) { + 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); + this.doRegisteredAction('onmove', x, y, px, py); +} + +actions.prototype._sys_onmove_choices = function (x, y) { + if (!core.status.lockControl) return false; + + switch (core.status.event.id) { + case 'action': + if (core.status.event.data.type == 'choices') { + this._onMoveChoices(x, y); + return true; + } + if (core.status.event.data.type == 'confirm') { + this._onMoveConfirmBox(x, y); + return true; + } + break; + case 'selectShop': + case 'switchs': + case 'switchs-sounds': + case 'switchs-display': + case 'switchs-action': + case 'notes': + case 'settings': + case 'syncSave': + case 'syncSelect': + case 'localSaveSelect': + case 'storageRemove': + case 'replay': + case 'gameInfo': + this._onMoveChoices(x, y); + return true; + case 'confirmBox': + this._onMoveConfirmBox(x, y); + return true; + default: + break; + } + return false; +} + +actions.prototype._sys_onmove = function (x, y, px, py) { + if (core.status.lockControl) return false; + + if (core.status.preview.dragging) { + core.setViewport(core.bigmap.offsetX - px + core.status.preview.px, core.bigmap.offsetY - py + core.status.preview.py); + core.status.preview.px = px; + core.status.preview.py = py; + return true; + } + if (core.status.preview.prepareDragging) { + if (Math.abs(px - core.status.preview.px) <= 20 && Math.abs(py - core.status.preview.py) <= 20) + return true; + else core.status.preview.prepareDragging = false; + } + + clearTimeout(core.timeout.onDownTimeout); + core.timeout.onDownTimeout = null; + + if ((core.status.stepPostfix || []).length > 0) { + var pos = {'x': parseInt((px + core.bigmap.offsetX) / 32), 'y': parseInt((py + core.bigmap.offsetY) / 32)}; + var pos0 = core.status.stepPostfix[core.status.stepPostfix.length - 1]; + var directionDistance = [pos.y - pos0.y, pos0.x - pos.x, pos0.y - pos.y, pos.x - pos0.x]; + var max = 0, index = 4; + for (var ii = 0; ii < 4; ii++) { + if (directionDistance[ii] > max) { + index = ii; + max = directionDistance[ii]; + } + } + pos = [{'x': 0, 'y': 1}, {'x': -1, 'y': 0}, {'x': 0, 'y': -1}, {'x': 1, 'y': 0}, false][index] + if (pos) { + pos.x += pos0.x; + pos.y += pos0.y; + core.status.stepPostfix.push(pos); + core.fillRect('ui', pos.x*32+12-core.bigmap.offsetX,pos.y*32+12-core.bigmap.offsetY,8,8, '#bfbfbf'); + } + } return true; } +////// 当点击(触摸)事件放开时 ////// +actions.prototype.onup = function (loc) { + 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); + this.doRegisteredAction('onup', x, y, px, py); +} + +actions.prototype._sys_onup = function (x, y, px, py) { + clearTimeout(core.timeout.onDownTimeout); + core.timeout.onDownTimeout = null; + clearInterval(core.interval.onDownInterval); + core.interval.onDownInterval = null; + + core.status.preview.prepareDragging = false; + if (core.status.preview.dragging) { + core.status.preview.dragging = false; + return true; + } + + if ((core.status.stepPostfix || []).length == 0) return false; + + var stepPostfix = []; + var direction = {'0': {'1': 'down', '-1': 'up'}, '-1': {'0': 'left'}, '1': {'0': 'right'}}; + for (var ii = 1; ii < core.status.stepPostfix.length; ii++) { + var pos0 = core.status.stepPostfix[ii - 1]; + var pos = core.status.stepPostfix[ii]; + stepPostfix.push({ + 'direction': direction[pos.x - pos0.x][pos.y - pos0.y], + 'x': pos.x, + 'y': pos.y + }); + } + var posx = core.status.stepPostfix[0].x; + var posy = core.status.stepPostfix[0].y; + core.status.stepPostfix = []; + if (!core.status.lockControl) { + core.clearMap('ui'); + } + + // 长按 + if (!core.status.lockControl && stepPostfix.length == 0 && core.status.downTime != null && new Date() - core.status.downTime >= 1000) { + core.actions.longClick(x, y, px, py); + } + else { + //posx,posy是寻路的目标点,stepPostfix是后续的移动 + core.setAutomaticRoute(posx, posy, stepPostfix); + } + core.status.downTime = null; + return true; +} + +////// 获得点击事件相对左上角的坐标 ////// +actions.prototype._getClickLoc = function (x, y) { + + var statusBar = {'x': 0, 'y': 0}; + var size = 32; + size = size * core.domStyle.scale; + + if (core.domStyle.isVertical) { + statusBar.x = 3; + statusBar.y = core.dom.statusBar.offsetHeight + 3; + } + else { + statusBar.x = core.dom.statusBar.offsetWidth + 3; + statusBar.y = 3; + } + + var left = core.dom.gameGroup.offsetLeft + statusBar.x; + var top = core.dom.gameGroup.offsetTop + statusBar.y; + var loc = {'x': Math.max(x - left), 'y': Math.max(y - top, 0), 'size': size}; + return loc; +} + + ////// 滑动鼠标滚轮时的操作 ////// actions.prototype.onmousewheel = function (direct) { this.doRegisteredAction('onmousewheel', direct); @@ -819,9 +844,9 @@ actions.prototype._sys_keyDownCtrl = function () { } ////// 长按 ////// -actions.prototype.longClick = function (x, y, px, py, fromEvent) { +actions.prototype.longClick = function (x, y, px, py) { if (!core.isPlaying()) return false; - return this.doRegisteredAction('longClick', x, y, px, py, fromEvent); + return this.doRegisteredAction('longClick', x, y, px, py); } actions.prototype._sys_longClick_lockControl = function (x, y, px, py) { @@ -861,15 +886,6 @@ actions.prototype._sys_longClick_lockControl = function (x, y, px, py) { return false; } -actions.prototype._sys_longClick = function (x, y, px, py, fromEvent) { - if (core.status.lockControl) return false; - // 虚拟键盘 - core.waitHeroToStop(function () { - core.ui._drawKeyBoard(); - }); - return true; -} - actions.prototype.onStatusBarClick = function (e) { if (!core.isPlaying()) return false; var left = core.dom.gameGroup.offsetLeft + 3; @@ -3098,7 +3114,9 @@ actions.prototype._clickKeyBoard = function (x, y) { actions.prototype._clickCursor = function (x, y, px, py) { if (x == core.status.automaticRoute.cursorX && y == core.status.automaticRoute.cursorY) { core.ui.closePanel(); - core.onclick(x, y, px, py, []); + // 视为按下再放起 + this.doRegisteredAction('ondown', x, y, px, py); + this.doRegisteredAction('onup', x, y, px, py); return; } core.status.automaticRoute.cursorX = x; @@ -3146,7 +3164,9 @@ actions.prototype._keyUpCursor = function (keycode) { core.ui.closePanel(); var x = core.status.automaticRoute.cursorX; var y = core.status.automaticRoute.cursorY; - core.onclick(x, y, 32 * x + 16, 32 * y + 16, []); + // 视为按下再放起 + this.doRegisteredAction('ondown', x, y, 32 * x + 16, 32 * y + 16); + this.doRegisteredAction('onup', x, y, 32 * x + 16, 32 * y + 16); return; } } diff --git a/libs/control.js b/libs/control.js index ce08fd41..120540ad 100644 --- a/libs/control.js +++ b/libs/control.js @@ -159,7 +159,7 @@ control.prototype._animationFrame_globalAnimate = function (timestamp) { }); // Global hero animate - if ((core.status.hero || {}).animate && core.status.heroMoving == 0 && main.mode == 'play') { + if ((core.status.hero || {}).animate && core.status.heroMoving == 0 && main.mode == 'play' && !core.status.preview.enabled) { core.drawHero('stop', null, core.status.globalAnimateStatus); } } @@ -498,11 +498,6 @@ control.prototype.clearContinueAutomaticRoute = function (callback) { if (callback) callback(); } -////// 显示离散的寻路点 ////// -control.prototype.fillPosWithPoint = function (pos) { - core.fillRect('ui', pos.x*32+12,pos.y*32+12,8,8, '#bfbfbf'); -} - ////// 设置自动寻路路线 ////// control.prototype.setAutomaticRoute = function (destX, destY, stepPostfix) { if (!core.status.played || core.status.lockControl) return; @@ -834,6 +829,7 @@ control.prototype.drawHero = function (status, offset, frame) { core.setGameCanvasTranslate('hero', 0, 0); delete core.canvas.hero._px; delete core.canvas.hero._py; + core.status.preview.enabled = false; if (!core.hasFlag('__lockViewport__')) { this._drawHero_updateViewport(x, y, offset); } diff --git a/libs/core.js b/libs/core.js index 8cb19316..d0d0a039 100644 --- a/libs/core.js +++ b/libs/core.js @@ -178,6 +178,13 @@ function core() { // 按下键的时间:为了判定双击 'downTime': null, 'ctrlDown': false, + 'preview': { + 'enabled': false, + 'prepareDragging': false, + 'dragging': false, + 'px': 0, + 'py': 0, + }, // 路线&回放 'route': [], diff --git a/project/materials/keyboard.png b/project/materials/keyboard.png index 55d5b2dccedc1c36557b00fdf51e676dfc46e286..161adfb86dd6bcbe5d12834a1eb2815fc80fe13f 100644 GIT binary patch delta 26700 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 delta 26755 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 any): void - /** 显示离散的寻路点 */ - fillPosWithPoint(pos?: any): void - /** 设置行走的效果动画 */ setHeroMoveInterval(callback?: () => any): void