From ebcc0bcfe5c0ce0ca0389f9258b4ac5a647623e0 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Wed, 20 Nov 2024 22:06:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9A=82=E6=97=B6=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=9D=9E=E7=9E=AC=E7=A7=BB=E7=9A=84=E5=B9=B3=E6=BB=91=E8=A7=86?= =?UTF-8?q?=E8=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/render/preset/viewport.ts | 10 +++++----- src/game/state/move.ts | 11 +++++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/core/render/preset/viewport.ts b/src/core/render/preset/viewport.ts index 01603c8..864f3aa 100644 --- a/src/core/render/preset/viewport.ts +++ b/src/core/render/preset/viewport.ts @@ -159,7 +159,7 @@ export class FloorViewport implements ILayerGroupRenderExtends { let yStartTime: number = Date.now(); let ending: boolean = false; // 这个数等于 sinh(2),用这个数的话,可以正好在刚开始移动的时候达到1的斜率,效果会比较好 - const transitionTime = this.hero.speed * 3.626860407847019; + let transitionTime = this.hero.speed * 3.626860407847019; const setTargetX = (x: number, time: number) => { if (x === xTarget) return; @@ -178,6 +178,7 @@ export class FloorViewport implements ILayerGroupRenderExtends { this.hero.off('moveTick', this.movingFramer); } this.movingFramer = () => { + if (this.inTransition) return; const now = Date.now(); if (!this.inMoving && !ending) { setTargetX(0, now); @@ -194,10 +195,7 @@ export class FloorViewport implements ILayerGroupRenderExtends { if (!this.hero.renderable) return; const { x, y } = this.hero.renderable; - const { x: nx, y: ny } = this.getBoundedPosition( - x + this.ox, - y + this.oy - ); + const { x: nx, y: ny } = this.getBoundedPosition(x, y); this.nx = nx; this.ny = ny; @@ -207,6 +205,8 @@ export class FloorViewport implements ILayerGroupRenderExtends { return; } } + // todo: 效果太差了,需要优化 + return; if (this.ox !== xTarget) { const time = transitionTime * Math.abs(xStart - xTarget); const progress = (now - xStartTime) / time; diff --git a/src/game/state/move.ts b/src/game/state/move.ts index 9bbcb5c..1ba8ef3 100644 --- a/src/game/state/move.ts +++ b/src/game/state/move.ts @@ -504,6 +504,8 @@ export class HeroMover extends ObjectMoverBase { viewport.sync('startMove'); } } + } else { + viewport.sync('startMove'); } } @@ -528,7 +530,8 @@ export class HeroMover extends ObjectMoverBase { step: MoveStepDir, controller: IMoveController ): Promise { - const showDir = toDir(this.moveDir); + const showDir = toDir(this.faceDir); + const dir4Move = toDir(this.moveDir); core.setHeroLoc('direction', showDir); const { x, y } = core.status.hero.loc; @@ -549,7 +552,7 @@ export class HeroMover extends ObjectMoverBase { // 检查传送门 if (!this.ignoreTerrain) { - const { portal, data } = this.checkPortal(x, y, showDir); + const { portal, data } = this.checkPortal(x, y, dir4Move); if (portal && data) { this.portalData = data; await this.renderHeroSwap(data); @@ -559,7 +562,7 @@ export class HeroMover extends ObjectMoverBase { const dir = this.moveDir; if (!this.ignoreTerrain) { - const { noPass, canMove } = this.checkCanMove(x, y, showDir); + const { noPass, canMove } = this.checkCanMove(x, y, dir4Move); if (!canMove) { return HeroMoveCode.CannotMove; @@ -603,7 +606,7 @@ export class HeroMover extends ObjectMoverBase { ): Promise { const { x, y } = core.status.hero.loc; const { x: nx, y: ny } = this.nextLoc(x, y, this.moveDir); - const showDir = toDir(this.moveDir); + const showDir = toDir(this.faceDir); // 前方不能移动 if (