mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-03-01 01:57:05 +08:00
fix: 优化moving更新
This commit is contained in:
parent
0568542cec
commit
85af7259ec
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user