diff --git a/src/core/render/index.ts b/src/core/render/index.ts index 590791c..1ff0548 100644 --- a/src/core/render/index.ts +++ b/src/core/render/index.ts @@ -36,7 +36,7 @@ Mota.require('var', 'loading').once('coreInit', () => { mapDraw.size(core._PX_, core._PY_); floorChange.size(480, 480); floorChange.setHD(true); - floorChange.setZIndex(10); + floorChange.setZIndex(50); floorChange.setTips(tips); pop.setZIndex(80); diff --git a/src/core/render/item.ts b/src/core/render/item.ts index 097204d..2b31c42 100644 --- a/src/core/render/item.ts +++ b/src/core/render/item.ts @@ -337,7 +337,7 @@ export abstract class RenderItem } update(item: RenderItem = this): void { - if (this.needUpdate) return; + if (this.needUpdate || this.hidden) return; this.needUpdate = true; this.cacheDirty = true; this.parent?.update(item); diff --git a/src/core/render/preset/damage.ts b/src/core/render/preset/damage.ts index c0d89d0..6f02475 100644 --- a/src/core/render/preset/damage.ts +++ b/src/core/render/preset/damage.ts @@ -67,13 +67,11 @@ export class FloorDamageExtends } private onUpdate = (floor: FloorIds) => { - this.sprite.requestBeforeFrame(() => { - if (!this.floorBinder.bindThisFloor) { - ensureFloorDamage(floor); - core.status.maps[floor].enemy.calRealAttribute(); - } - this.update(floor); - }); + if (!this.floorBinder.bindThisFloor) { + ensureFloorDamage(floor); + core.status.maps[floor].enemy.calRealAttribute(); + } + this.update(floor); }; private onSetBlock = (x: number, y: number, floor: FloorIds) => { diff --git a/src/core/render/render.ts b/src/core/render/render.ts index 555a5d9..f641d3d 100644 --- a/src/core/render/render.ts +++ b/src/core/render/render.ts @@ -33,7 +33,7 @@ export class MotaRenderer extends Container { } update(item: RenderItem = this) { - if (this.needUpdate) return; + if (this.needUpdate || this.hidden) return; this.needUpdate = true; this.requestRenderFrame(() => { this.refresh(item); diff --git a/src/core/render/transform.ts b/src/core/render/transform.ts index 436435a..d88e088 100644 --- a/src/core/render/transform.ts +++ b/src/core/render/transform.ts @@ -178,8 +178,28 @@ export class Transform { } /** - * 根据摄像机的信息,将一个点转换为计算后的位置 - * @param transform 摄像机 + * 根据变换矩阵的信息,将一个点转换为计算后的位置 + * @param x 横坐标 + * @param y 纵坐标 + */ + transformed(x: number, y: number) { + return multiplyVec3(this.mat, [x, y, 1]); + } + + /** + * 根据变换矩阵的信息,将一个计算后的位置逆转换为原位置 + * @param x 横坐标 + * @param y 纵坐标 + */ + untransformed(x: number, y: number) { + const invert = mat3.create(); + mat3.invert(invert, this.mat); + return multiplyVec3(invert, [x, y, 1]); + } + + /** + * 根据变换矩阵的信息,将一个点转换为计算后的位置 + * @param transform 变换矩阵 * @param x 横坐标 * @param y 纵坐标 */ @@ -188,8 +208,8 @@ export class Transform { } /** - * 根据摄像机的信息,将一个计算后的位置逆转换为原位置 - * @param transform 摄像机 + * 根据变换矩阵的信息,将一个计算后的位置逆转换为原位置 + * @param transform 变换矩阵 * @param x 横坐标 * @param y 纵坐标 */ diff --git a/src/plugin/loopMap.ts b/src/plugin/loopMap.ts index 7225f0b..3f3d533 100644 --- a/src/plugin/loopMap.ts +++ b/src/plugin/loopMap.ts @@ -27,12 +27,12 @@ function createLayer() { const damage = new FloorDamageExtends(); const detail = new FloorItemDetail(); + group.id = 'layer-loop'; group.extends(damage); group.extends(detail); loopLayer = group; group.setZIndex(20); - group.id = 'layer-loop'; } function enableLoopMapElement(floorId: FloorIds) { @@ -61,18 +61,18 @@ function enableLoopMapElement(floorId: FloorIds) { loopLayer.removeTicker(delegation); delegation = loopLayer.delegateTicker(() => { - const [x1] = Transform.transformed(transform, 0, 0); + const [x1] = transform.transformed(0, 0); const camera = loopLayer.camera; if (x1 > 0) { // 这个是计算循环地图应该显示在哪 - const [, y2] = Transform.transformed(transform, x1 - testPos, 0); + const [, y2] = transform.transformed(x1 - testPos, 0); camera.reset(); camera.translate(core._PX_ - testPos, y2); loopLayer.pos(transform.x - core._PX_, 0); loopLayer.show(); loopLayer.update(loopLayer); } else { - const [x2, y2] = Transform.transformed(transform, testPos, 0); + const [x2, y2] = transform.transformed(testPos, 0); if (x2 < core._PX_) { // 这个不用做其他运算,可以直接显示 camera.reset();