From 58e6b4be83a3cede32b3075c798afa6476838d59 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Fri, 22 Nov 2024 21:52:25 +0800 Subject: [PATCH] fix: animateBlock --- public/libs/maps.js | 24 ++++++++++++++++-------- public/project/floors/MT21.js | 2 +- public/project/maps.js | 2 +- src/core/render/preset/floor.ts | 3 ++- src/core/render/preset/layer.ts | 23 +++++++++++++++-------- 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/public/libs/maps.js b/public/libs/maps.js index d517f1c..5db3ef4 100644 --- a/public/libs/maps.js +++ b/public/libs/maps.js @@ -4139,16 +4139,24 @@ maps.prototype.animateBlock = function (loc, type, time, callback) { typeof type != 'number' ) { if (callback) callback(); - } - // --- 检测所有是0的点 - var list = this._animateBlock_getList(loc, type); - if (list.length == 0) { - if (callback) callback(); return; } - this._animateBlock_drawList(list, 0); - time /= Math.max(core.status.replay.speed, 1); - this._animateBlock_doAnimate(loc, list, type, time, callback); + loc.forEach(function (t) { + if (type === 'show') core.showBlock(t[0], t[1]); + else if (type === 'hide') core.hideBlock(t[0], t[1]); + else if (type === 'remove') core.removeBlock(t[0], t[1]); + else core.showBlock(t[0], t[1]); + }); + callback?.(); + // --- 检测所有是0的点 + // var list = this._animateBlock_getList(loc, type); + // if (list.length == 0) { + // if (callback) callback(); + // return; + // } + // this._animateBlock_drawList(list, 0); + // time /= Math.max(core.status.replay.speed, 1); + // this._animateBlock_doAnimate(loc, list, type, time, callback); }; maps.prototype._animateBlock_doAnimate = function ( diff --git a/public/project/floors/MT21.js b/public/project/floors/MT21.js index e7704f4..a117e57 100644 --- a/public/project/floors/MT21.js +++ b/public/project/floors/MT21.js @@ -157,7 +157,7 @@ main.floors.MT21= "\t[低级智人]\b[up,hero]或许智慧结晶会告诉我答案吧。", { "type": "function", - "function": "function(){\nMota.require('var', 'fixedUi').open('chapter', { chapter: '第二章 智慧' });\nMota.Plugin.require('removeMap_g').removeMaps('tower1', 'tower7', true);\ndelete flags.tower1;\ndelete flags.wordsTimeOut;\ndelete flags.boom;\ndelete flags.booming;\n}" + "function": "function(){\nif (!core.isReplaying()) Mota.require('var', 'fixedUi').open('chapter', { chapter: '第二章 智慧' });\nMota.Plugin.require('removeMap_g').removeMaps('tower1', 'tower7', true);\ndelete flags.tower1;\ndelete flags.wordsTimeOut;\ndelete flags.boom;\ndelete flags.booming;\n}" }, { "type": "setValue", diff --git a/public/project/maps.js b/public/project/maps.js index 24a8c01..1b93d8e 100644 --- a/public/project/maps.js +++ b/public/project/maps.js @@ -113,7 +113,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "140": {"cls":"npcs","id":"blackTrader","faceIds":{"down":"blueTrader","left":"redMSNpc","right":"blackTrader","up":"N532"}}, "141": {"cls":"autotile","id":"autotile4","script":1}, "142": {"cls":"autotile","id":"autotile5"}, - "143": {"cls":"autotile","id":"autotile6","autotileConnection":["A492"]}, + "143": {"cls":"autotile","id":"autotile6","autotileConnection":["A492","A494","A497"]}, "144": {"cls":"autotile","id":"autotile7"}, "145": {"cls":"autotile","id":"autotile8"}, "146": {"cls":"autotile","id":"autotile9","canPass":true}, diff --git a/src/core/render/preset/floor.ts b/src/core/render/preset/floor.ts index 6c34484..e954ed8 100644 --- a/src/core/render/preset/floor.ts +++ b/src/core/render/preset/floor.ts @@ -339,7 +339,8 @@ export class LayerDoorAnimate implements ILayerRenderExtends { animate: 0, frame, bigImage: false, - render: renderable.render + render: renderable.render, + alpha: 1 }; return { renderable: data, count: frame, perTime }; } diff --git a/src/core/render/preset/layer.ts b/src/core/render/preset/layer.ts index 3ec0294..8d8ddc0 100644 --- a/src/core/render/preset/layer.ts +++ b/src/core/render/preset/layer.ts @@ -513,6 +513,7 @@ export interface LayerMovingRenderable extends RenderableData { zIndex: number; x: number; y: number; + alpha: number; } export class Layer extends Container { @@ -842,7 +843,8 @@ export class Layer extends Container { ...renderable, x: nx, y: ny, - zIndex: ny + zIndex: ny, + alpha: 1 }); } } @@ -858,8 +860,10 @@ export class Layer extends Container { * 计算自动元件的连接信息(会丢失autotiles属性的引用) */ calAutotiles(x: number, y: number, width: number, height: number) { - const ex = x + width; - const ey = y + height; + const sx = x - 1; + const sy = y - 1; + const ex = x + width + 1; + const ey = y + height + 1; const data = this.renderData; const tile = texture.autotile; const map = maps_90f36752_8815_4be8_b32b_d7fad1d0542e; @@ -922,9 +926,10 @@ export class Layer extends Container { } }; - for (let nx = x; nx < ex; nx++) { - for (let ny = y; ny < ey; ny++) { - if (nx > w || ny > h) continue; + for (let nx = sx; nx < ex; nx++) { + if (nx >= w || nx < 0) continue; + for (let ny = sy; ny < ey; ny++) { + if (ny >= h || ny < 0) continue; const index = nx + ny * w; const num = data[index]; // 特判空气墙与空图块 @@ -1208,7 +1213,7 @@ export class Layer extends Container { const r = (max1 * max2) ** 2; this.movingRenderable.forEach(v => { - const { x, y, image, render, animate } = v; + const { x, y, image, render, animate, alpha } = v; const ff = frame % v.frame; const i = animate === -1 ? ff : animate; const [sx, sy, w, h] = render[i]; @@ -1226,6 +1231,7 @@ export class Layer extends Container { return; } + ctx.globalAlpha = alpha; ctx.drawImage(image, sx, sy, w, h, px, py, w, h); }); } @@ -1413,7 +1419,8 @@ export class Layer extends Container { frame: renderable.frame, bigImage: renderable.bigImage, animate: -1, - render: renderable.render + render: renderable.render, + alpha: 1 }; return moving; }