From 5ea909da302f9c012be28304f870c99897ecc5db Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Sun, 10 Jul 2022 00:38:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=8A=B6=E6=80=81=E6=A0=8F?= =?UTF-8?q?=E5=8F=8Aresize=E5=8F=8A=E8=A1=A8=E6=A0=BCbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/CodeMirror/defs.js | 4 +- _server/table/comment.js | 4 +- _server/table/data.comment.js | 6 +++ libs/control.js | 74 ++++++++++++++++++++--------------- libs/events.js | 2 +- libs/items.js | 4 +- libs/maps.js | 2 +- libs/ui.js | 2 +- main.js | 3 +- project/data.js | 3 +- project/functions.js | 13 +++--- runtime.d.ts | 6 ++- 12 files changed, 71 insertions(+), 52 deletions(-) diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js index 3174be5f..57b421ca 100644 --- a/_server/CodeMirror/defs.js +++ b/_server/CodeMirror/defs.js @@ -2408,8 +2408,8 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!type": "fn(type?: string, level?: number)" }, "updateStatusBar": { - "!doc": "立刻刷新状态栏和地图显伤
doNotCheckAutoEvents: 是否不检查自动事件", - "!type": "fn(doNotCheckAutoEvents?: bool)" + "!doc": "刷新状态栏和地图显伤
doNotCheckAutoEvents: 是否不检查自动事件", + "!type": "fn(doNotCheckAutoEvents?: bool, immediate?: bool)" }, "autosave": { "!doc": "自动存档", diff --git a/_server/table/comment.js b/_server/table/comment.js index d8d8b154..ad8ba96d 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -322,7 +322,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "haloAdd": { "_leaf": true, "_type": "checkbox", - "_docs": "吸血加到自身", + "_docs": "光环是否叠加", "_data": "光环是否叠加" }, "atkValue": { @@ -661,7 +661,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "ratio": { "_leaf": true, "_type": "textarea", - "_range": "thiseval==~~thiseval && thiseval>=0", + "_range": "thiseval <= Number.MAX_SAFE_INTEGER && thiseval>=0", "_docs": "宝石血瓶效果", "_data": "每一层的宝石/血瓶效果,即获得宝石和血瓶时框内\"ratio\"的值。" } diff --git a/_server/table/data.comment.js b/_server/table/data.comment.js index 2991876e..1b8774e9 100644 --- a/_server/table/data.comment.js +++ b/_server/table/data.comment.js @@ -552,6 +552,12 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { }, "_data": "状态栏显示项" }, + "autoScale": { + "_leaf": true, + "_type": "checkbox", + "_docs": "自动缩放最大化", + "_data": "是否自动缩放最大化,关闭后不再最大化" + }, "extendToolbar": { "_leaf": true, "_type": "checkbox", diff --git a/libs/control.js b/libs/control.js index 0a1f81c9..3c385ee1 100644 --- a/libs/control.js +++ b/libs/control.js @@ -18,7 +18,6 @@ control.prototype._init = function () { this.replayActions = []; this.weathers = {}; this.resizes = []; - this.needUpdate = false; this.noAutoEvents = true; // --- 注册系统的animationFrame this.registerAnimationFrame("totalTime", false, this._animationFrame_totalTime); @@ -29,7 +28,6 @@ control.prototype._init = function () { this.registerAnimationFrame("weather", true, this._animationFrame_weather); this.registerAnimationFrame("tip", true, this._animateFrame_tip); this.registerAnimationFrame("parallelDo", false, this._animationFrame_parallelDo); - this.registerAnimationFrame("updateStatusBar", true, this.updateStatusBar_update); // --- 注册系统的天气 this.registerWeather("rain", this._weather_rain, this._animationFrame_weather_rain); this.registerWeather("snow", this._weather_snow, this._animationFrame_weather_snow); @@ -1134,11 +1132,11 @@ control.prototype.checkBlock = function () { core.status.hero.statistics.extraDamage += damage; if (core.status.hero.hp <= 0) { core.status.hero.hp = 0; - core.updateStatusBar(); + core.updateStatusBar(false, true); core.events.lose(); return; } else { - core.updateStatusBar(); + core.updateStatusBar(false, true); } } this._checkBlock_ambush(core.status.checkBlock.ambush[loc]); @@ -1350,7 +1348,7 @@ control.prototype.startReplay = function (list) { core.createCanvas('replay', 0, core.__PIXELS__ - 40, core.__PIXELS__, 40, 199); core.setOpacity('replay', 0.6); this._replay_drawProgress(); - core.updateStatusBar(); + core.updateStatusBar(false, true); core.drawTip("开始播放"); this.replay(); } @@ -1365,7 +1363,7 @@ control.prototype.triggerReplay = function () { control.prototype.pauseReplay = function () { if (!core.isPlaying() || !core.isReplaying()) return; core.status.replay.pausing = true; - core.updateStatusBar(); + core.updateStatusBar(false, true); core.drawTip("暂停播放"); } @@ -1377,7 +1375,7 @@ control.prototype.resumeReplay = function () { return core.drawTip("请等待当前事件的处理结束"); } core.status.replay.pausing = false; - core.updateStatusBar(); + core.updateStatusBar(false, true); core.drawTip("恢复播放"); core.replay(); } @@ -1442,7 +1440,7 @@ control.prototype.stopReplay = function (force) { core.status.replay.steps = 0; core.status.replay.save = []; core.deleteCanvas('replay'); - core.updateStatusBar(); + core.updateStatusBar(false, true); core.drawTip("停止播放并恢复游戏"); } @@ -1477,7 +1475,7 @@ control.prototype.rewindReplay = function () { core.createCanvas('replay', 0, core.__PIXELS__ - 40, core.__PIXELS__, 40, 199); core.setOpacity('replay', 0.6); core.control._replay_drawProgress(); - core.updateStatusBar(); + core.updateStatusBar(false, true); core.drawTip("成功回退到上一个节点"); }); } @@ -3045,20 +3043,21 @@ control.prototype.clearStatusBar = function () { } ////// 更新状态栏 ////// -control.prototype.updateStatusBar = function (doNotCheckAutoEvents) { - this.needUpdate = true; +control.prototype.updateStatusBar = function (doNotCheckAutoEvents, immediate) { + if (immediate) { + return this.updateStatusBar_update(); + } if (!doNotCheckAutoEvents) this.noAutoEvents = false; - if (core.isReplaying()) return this.updateStatusBar_update(); + if (core.isReplaying()) this.updateStatusBar_update(); + requestAnimationFrame(this.updateStatusBar_update) } control.prototype.updateStatusBar_update = function () { - if (!core.control.needUpdate) return; if (!core.isPlaying() || core.hasFlag('__statistics__')) return; core.control.controldata.updateStatusBar(); if (!core.control.noAutoEvents) core.checkAutoEvents(); core.control._updateStatusBar_setToolboxIcon(); core.clearRouteFolding(); - core.control.needUpdate = false; core.control.noAutoEvents = true; } @@ -3364,18 +3363,18 @@ control.prototype._resize_gameGroup = function (obj) { control.prototype._resize_canvas = function (obj) { var innerSize = (obj.CANVAS_WIDTH * core.domStyle.scale) + "px"; - for (var i = 0; i < core.dom.gameCanvas.length; ++i) { - var ctx = core.dom.gameCanvas[i].getContext('2d'); - // core.maps._setHDCanvasSize(ctx); - core.resizeCanvas(ctx, core.__PIXELS__, core.__PIXELS__); - } - requestAnimationFrame(function () { - if (core.status && core.status.maps && core.status.floorId && core.status.maps[core.status.floorId]) { - core.redrawMap(); - core.drawHero(); - core.setWeather(core.animateFrame.weather.type, core.animateFrame.weather.level); + if (!core.isPlaying()) { + for (var i = 0; i < core.dom.gameCanvas.length; ++i) { + var ctx = core.dom.gameCanvas[i].getContext('2d'); + core.resizeCanvas(ctx, core.__PIXELS__, core.__PIXELS__); + core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[i].style.height = innerSize; } - }); + } else { + requestAnimationFrame(function () { + for (var i = 0; i < core.dom.gameCanvas.length; ++i) + core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[i].style.height = innerSize; + }); + } core.dom.gif.style.width = core.dom.gif.style.height = innerSize; core.dom.gif2.style.width = core.dom.gif2.style.height = innerSize; core.dom.gameDraw.style.width = core.dom.gameDraw.style.height = innerSize; @@ -3389,13 +3388,24 @@ control.prototype._resize_canvas = function (obj) { core.canvas[cn].canvas.style.height = core.canvas[cn].canvas.height / ratio * core.domStyle.scale + "px"; }); // resize dynamic canvas - for (var name in core.dymCanvas) { - var ctx = core.dymCanvas[name], canvas = ctx.canvas; - // core.maps._setHDCanvasSize(ctx, parseFloat(canvas.getAttribute('_width')), parseFloat(canvas.getAttribute('_height'))); - canvas.style.left = parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px"; - canvas.style.top = parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px"; - var scale = canvas.getAttribute('_scale') || 1; - core.resizeCanvas(canvas, canvas.width * scale / core.domStyle.scale, canvas.height * scale / core.domStyle.scale); + if (!core.isPlaying()) { + for (var name in core.dymCanvas) { + var ctx = core.dymCanvas[name], canvas = ctx.canvas; + // core.maps._setHDCanvasSize(ctx, parseFloat(canvas.getAttribute('_width')), parseFloat(canvas.getAttribute('_height'))); + canvas.style.left = parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px"; + canvas.style.top = parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px"; + var scale = canvas.getAttribute('_scale') || 1; + core.resizeCanvas(canvas, canvas.width * scale / core.domStyle.scale, canvas.height * scale / core.domStyle.scale); + } + } else { + for (var name in core.dymCanvas) { + var ctx = core.dymCanvas[name], canvas = ctx.canvas; + var ratio = canvas.hasAttribute('isHD') ? core.domStyle.ratio : 1; + canvas.style.width = canvas.width / ratio * core.domStyle.scale + "px"; + canvas.style.height = canvas.height / ratio * core.domStyle.scale + "px"; + canvas.style.left = parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px"; + canvas.style.top = parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px"; + } } // resize next main.dom.next.style.width = main.dom.next.style.height = 5 * core.domStyle.scale + "px"; diff --git a/libs/events.js b/libs/events.js index 3275105c..06fa8e6e 100644 --- a/libs/events.js +++ b/libs/events.js @@ -2369,7 +2369,7 @@ events.prototype._action_function = function (data, x, y, prefix) { } events.prototype._action_update = function (data, x, y, prefix) { - core.updateStatusBar(data.doNotCheckAutoEvents); + core.updateStatusBar(data.doNotCheckAutoEvents, true); core.doAction(); } diff --git a/libs/items.js b/libs/items.js index a9795c9a..d0f16760 100644 --- a/libs/items.js +++ b/libs/items.js @@ -53,7 +53,7 @@ items.prototype.getItemEffect = function (itemId, itemNum) { console.error(e); } } - core.updateStatusBar(); + core.updateStatusBar(false, true); } else { core.addItem(itemId, itemNum); @@ -121,7 +121,7 @@ items.prototype._afterUseItem = function (itemId) { core.status.hero.items[itemCls][itemId]--; if (core.status.hero.items[itemCls][itemId] <= 0) delete core.status.hero.items[itemCls][itemId]; - core.updateStatusBar(); + core.updateStatusBar(false, true); } ////// 当前能否使用道具 ////// diff --git a/libs/maps.js b/libs/maps.js index a5565f61..dab3ae7d 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -2068,7 +2068,7 @@ maps.prototype.showBlock = function (x, y, floorId) { } else { core.drawBlock(block); core.addGlobalAnimate(block); - core.updateStatusBar(); + core.updateStatusBar(false, true); } } } diff --git a/libs/ui.js b/libs/ui.js index ef415a34..de41794f 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -669,7 +669,7 @@ ui.prototype.closePanel = function () { } this.clearUI(); core.maps.generateGroundPattern(); - core.updateStatusBar(true); + core.updateStatusBar(true, true); core.unlockControl(); core.status.event.data = null; core.status.event.id = null; diff --git a/main.js b/main.js index a5742c87..97341d0a 100644 --- a/main.js +++ b/main.js @@ -238,7 +238,8 @@ main.prototype.init = function (mode, callback) { main.core.init(coreData, callback); main.core.resize(); // 自动放缩最大化 - if (core.getLocalStorage('autoScale') === void 0) core.setLocalStorage('autoScale', true); + if (!data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.flags.autoScale) core.setLocalStorage('autoScale', false) + else core.setLocalStorage('autoScale', true); if (core.getLocalStorage('autoScale') && !core.domStyle.isVertical) { try { if (main.core) { diff --git a/project/data.js b/project/data.js index ac3bbcbf..e09edae7 100644 --- a/project/data.js +++ b/project/data.js @@ -1,4 +1,4 @@ -var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = +var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = { "main": { "floorIds": [ @@ -747,6 +747,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "enableMoney", "enableKeys" ], + "autoScale": true, "extendToolbar": false, "flyNearStair": true, "flyRecordPosition": false, diff --git a/project/functions.js b/project/functions.js index 69c70ca7..535d5c60 100644 --- a/project/functions.js +++ b/project/functions.js @@ -290,7 +290,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // 判定是否致死 if (damage == null || damage >= core.status.hero.hp) { core.status.hero.hp = 0; - core.updateStatusBar(); + core.updateStatusBar(false, true); core.events.lose('战斗失败'); return; } @@ -926,6 +926,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.getNextItem(); break; case 118: // F7:开启debug模式 + case 119: // F8:由于F7与部分浏览器有冲突,故新增F8 core.debug(); break; case 70: // F:开启技能“二倍斩” @@ -1000,7 +1001,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = if (px >= 200 && px <= 250 && py >= 50 && py <= 100) { // 记录点击坐标。这里的1代表此时是竖屏! core.status.route.push("click:1:" + px + ":" + py); - // 可以插入公共事件 / 普通事件 / 执行一段脚本(如打开自绘UI或增减flag) core.insertCommonEvent("道具商店"); // core.insertAction(["一段事件"]); @@ -1011,7 +1011,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = if (px >= 50 && px <= 100 && py >= 200 && py <= 250) { // 记录点击坐标。这里的0代表此时是横屏! core.status.route.push("click:0:" + px + ":" + py); - // 可以插入公共事件 / 普通事件 / 执行一段脚本(如打开自绘UI或增减flag) core.insertCommonEvent("道具商店"); // core.insertAction(["一段事件"]); @@ -1478,17 +1477,17 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.status.hero.hp -= core.values.poisonDamage; if (core.status.hero.hp <= 0) { core.status.hero.hp = 0; - core.updateStatusBar(); + core.updateStatusBar(false, true); core.events.lose(); return; } else { - core.updateStatusBar(); + core.updateStatusBar(false, true); } } // 从v2.7开始,每一步行走不会再刷新状态栏。 // 如果有特殊要求(如每走一步都加buff之类),可手动取消注释下面这一句: - // core.updateStatusBar(true); + // core.updateStatusBar(true, true); // 检查自动事件 core.checkAutoEvents(); @@ -1553,7 +1552,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.status.hero.statistics.moveDirectly++; core.status.hero.statistics.ignoreSteps += ignoreSteps; if (core.hasFlag('poison')) { - core.updateStatusBar(); + core.updateStatusBar(false, true); } core.checkRouteFolding(); return true; diff --git a/runtime.d.ts b/runtime.d.ts index c9d2a474..dcb22c10 100644 --- a/runtime.d.ts +++ b/runtime.d.ts @@ -331,10 +331,12 @@ declare class control { debug(): void /** - * 立刻刷新状态栏和地图显伤 + * 刷新状态栏和地图显伤 + * 2.9.1优化:非必须立刻执行的刷新(一般是伤害相关的除外)的延迟到下一动画帧执行 * @param doNotCheckAutoEvents 是否不检查自动事件 + * @param immediate 是否立刻刷新,而非延迟到下一动画帧刷新 */ - updateStatusBar(doNotCheckAutoEvents?: boolean): void + updateStatusBar(doNotCheckAutoEvents?: boolean, immediate?: boolean): void /** 删除某个flag/变量 */ removeFlag(name: string): void