fix: 优化moving更新

This commit is contained in:
unanmed 2024-08-28 00:30:59 +08:00
parent 0568542cec
commit 85af7259ec
3 changed files with 17 additions and 4 deletions

View File

@ -333,6 +333,7 @@ export class LayerDoorAnimate implements ILayerRenderExtends {
const { renderable: data, count: frame, perTime } = renderable; const { renderable: data, count: frame, perTime } = renderable;
data.animate = 0; data.animate = 0;
this.moving.add(data); this.moving.add(data);
this.layer.requestUpdateMoving();
let now = 0; let now = 0;
while (now < frame) { while (now < frame) {
@ -342,6 +343,7 @@ export class LayerDoorAnimate implements ILayerRenderExtends {
} }
this.moving.delete(data); this.moving.delete(data);
this.layer.requestUpdateMoving();
return Promise.resolve(); return Promise.resolve();
} }
@ -355,6 +357,7 @@ export class LayerDoorAnimate implements ILayerRenderExtends {
const { renderable: data, count: frame, perTime } = renderable; const { renderable: data, count: frame, perTime } = renderable;
data.animate = frame - 1; data.animate = frame - 1;
this.moving.add(data); this.moving.add(data);
this.layer.requestUpdateMoving();
let now = 0; let now = 0;
while (now >= 0) { while (now >= 0) {
@ -363,6 +366,7 @@ export class LayerDoorAnimate implements ILayerRenderExtends {
this.layer.update(this.layer); this.layer.update(this.layer);
} }
this.moving.delete(data); this.moving.delete(data);
this.layer.requestUpdateMoving();
return Promise.resolve(); return Promise.resolve();
} }

View File

@ -652,7 +652,7 @@ export class Layer extends Container {
// todo: 是否需要桶排? // todo: 是否需要桶排?
/** 移动层的渲染信息 */ /** 移动层的渲染信息 */
movingRenderable: LayerMovingRenderable[] = []; movingRenderable: LayerMovingRenderable[] = [];
/** 下一渲染时是否需要更新移动层的渲染信息 */ /** 下一渲染时是否需要更新移动层的渲染信息 */
needUpdateMoving: boolean = false; needUpdateMoving: boolean = false;
private extend: Map<string, ILayerRenderExtends> = new Map(); private extend: Map<string, ILayerRenderExtends> = new Map();
@ -1100,6 +1100,13 @@ export class Layer extends Container {
this.movingRenderable.sort((a, b) => a.zIndex - b.zIndex); 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(); this.backMap.clear();
if (this.needUpdateMoving) this.updateMovingRenderable(); if (this.needUpdateMoving) this.updateMovingRenderable();
this.needUpdateMoving = false;
for (const ex of this.extend.values()) { for (const ex of this.extend.values()) {
ex.onBeforeRender?.(this, transform, need); ex.onBeforeRender?.(this, transform, need);

View File

@ -288,7 +288,7 @@ export function init() {
const originFrom = structuredClone(v.renderable.render); const originFrom = structuredClone(v.renderable.render);
const originTo = structuredClone(renderable.render); const originTo = structuredClone(renderable.render);
v.layer.updateMovingRenderable(); v.layer.requestUpdateMoving();
const append = (r: LayerMovingRenderable[]) => { const append = (r: LayerMovingRenderable[]) => {
r.push(renderable); r.push(renderable);
}; };
@ -302,6 +302,7 @@ export function init() {
v.renderable!.render = originFrom; v.renderable!.render = originFrom;
v.off('moveTick', func); v.off('moveTick', func);
v.off('append', append); v.off('append', append);
v.layer.requestUpdateMoving();
return; return;
} }
const clipWidth = cell * progress; const clipWidth = cell * progress;
@ -313,14 +314,14 @@ export function init() {
v.renderable!.y = y; v.renderable!.y = y;
if (heroDir === 'left' || heroDir === 'right') { if (heroDir === 'left' || heroDir === 'right') {
v.renderable!.x = x + (clipWidth / 2 / cell) * dx; v.renderable!.x = x + (clipWidth / 2 / cell) * dx;
v.renderable?.render.forEach((v, i) => { v.renderable!.render.forEach((v, i) => {
v[2] = beforeWidth; v[2] = beforeWidth;
if (heroDir === 'left') { if (heroDir === 'left') {
v[0] = originFrom[i][0] + clipWidth; v[0] = originFrom[i][0] + clipWidth;
} }
}); });
} else { } else {
v.renderable?.render.forEach((v, i) => { v.renderable!.render.forEach((v, i) => {
v[3] = beforeHeight; v[3] = beforeHeight;
if (heroDir === 'up') { if (heroDir === 'up') {
v[1] = originFrom[i][1] + clipHeight + restHeight; v[1] = originFrom[i][1] + clipHeight + restHeight;