diff --git a/src/core/render/preset/floor.ts b/src/core/render/preset/floor.ts index 15247be..70eb2dd 100644 --- a/src/core/render/preset/floor.ts +++ b/src/core/render/preset/floor.ts @@ -333,6 +333,7 @@ export class LayerDoorAnimate implements ILayerRenderExtends { const { renderable: data, count: frame, perTime } = renderable; data.animate = 0; this.moving.add(data); + this.layer.requestUpdateMoving(); let now = 0; while (now < frame) { @@ -342,6 +343,7 @@ export class LayerDoorAnimate implements ILayerRenderExtends { } this.moving.delete(data); + this.layer.requestUpdateMoving(); return Promise.resolve(); } @@ -355,6 +357,7 @@ export class LayerDoorAnimate implements ILayerRenderExtends { const { renderable: data, count: frame, perTime } = renderable; data.animate = frame - 1; this.moving.add(data); + this.layer.requestUpdateMoving(); let now = 0; while (now >= 0) { @@ -363,6 +366,7 @@ export class LayerDoorAnimate implements ILayerRenderExtends { this.layer.update(this.layer); } this.moving.delete(data); + this.layer.requestUpdateMoving(); return Promise.resolve(); } diff --git a/src/core/render/preset/layer.ts b/src/core/render/preset/layer.ts index a01e617..7190805 100644 --- a/src/core/render/preset/layer.ts +++ b/src/core/render/preset/layer.ts @@ -652,7 +652,7 @@ export class Layer extends Container { // todo: 是否需要桶排? /** 移动层的渲染信息 */ movingRenderable: LayerMovingRenderable[] = []; - /** 下一此渲染时是否需要更新移动层的渲染信息 */ + /** 下一次渲染时是否需要更新移动层的渲染信息 */ needUpdateMoving: boolean = false; private extend: Map = new Map(); @@ -1100,6 +1100,13 @@ export class Layer extends Container { this.movingRenderable.sort((a, b) => a.zIndex - b.zIndex); } + /** + * 在下一帧更新moving层 + */ + requestUpdateMoving() { + this.needUpdateMoving = true; + } + /** * 渲染当前地图 */ @@ -1109,6 +1116,7 @@ export class Layer extends Container { this.backMap.clear(); if (this.needUpdateMoving) this.updateMovingRenderable(); + this.needUpdateMoving = false; for (const ex of this.extend.values()) { ex.onBeforeRender?.(this, transform, need); diff --git a/src/plugin/game/fallback.ts b/src/plugin/game/fallback.ts index bf9eb24..2372dbf 100644 --- a/src/plugin/game/fallback.ts +++ b/src/plugin/game/fallback.ts @@ -288,7 +288,7 @@ export function init() { const originFrom = structuredClone(v.renderable.render); const originTo = structuredClone(renderable.render); - v.layer.updateMovingRenderable(); + v.layer.requestUpdateMoving(); const append = (r: LayerMovingRenderable[]) => { r.push(renderable); }; @@ -302,6 +302,7 @@ export function init() { v.renderable!.render = originFrom; v.off('moveTick', func); v.off('append', append); + v.layer.requestUpdateMoving(); return; } const clipWidth = cell * progress; @@ -313,14 +314,14 @@ export function init() { v.renderable!.y = y; if (heroDir === 'left' || heroDir === 'right') { v.renderable!.x = x + (clipWidth / 2 / cell) * dx; - v.renderable?.render.forEach((v, i) => { + v.renderable!.render.forEach((v, i) => { v[2] = beforeWidth; if (heroDir === 'left') { v[0] = originFrom[i][0] + clipWidth; } }); } else { - v.renderable?.render.forEach((v, i) => { + v.renderable!.render.forEach((v, i) => { v[3] = beforeHeight; if (heroDir === 'up') { v[1] = originFrom[i][1] + clipHeight + restHeight;