【战斗系统】怪物进入追击(Aggro)状态后移动方向与模型朝向不一致 #31
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题现象
在 Act 场景中,当怪物被玩家吸引仇恨(Aggro)并开始移动追击玩家时,怪物在画面中实际移动的方向与所渲染的怪物模型/动画朝向(Facing)存在明显夹角甚至完全相反。
根本原因排查分析
src/scene/act-scene.ts中,渲染怪物时直接调用了facingToDirection(monster.facing, art.directions)。facingToDirection算法最初是为主角的平直 16 向设计的,并未适配游戏等轴测网格与视口投影(屏幕 2:1 等轴测矩阵,存在 45° / Math.PI/4 旋转变换),导致计算出的 direction 索引与 DCC 对应朝向产生偏移。combat.ts的tickMonster中更新monster.facing时:monster.facing = facingOf(monster.x, monster.y, target.x, target.y);monster.x, monster.y是基于 2D 平面还是等轴测视口未与移动增量统一;如果移动向量与渲染图层的投影轴未严格保持相同正负基准,就会出现“往右上走,面朝左下”或相差 90 度的现象。建议解决方案
monsterFacingToDirection(facing: number, directions: number): number,严格对齐 D2 原版 DCC 8-direction 定义(以原点顺时针/逆时针方向对齐南、西南、西、西北、北、东北、东、东南)。修复完成说明
已在提交
d6e6248中修复:src/game/monster-art.ts中直接以线性循环下标读取dcc.directions[dir]的问题,改为严格使用dir64ToDcc(dir64, dcc.directions.length)进行 8 方向排列对齐(原 DCC 8 向排列为[4, 0, 5, 1, 6, 2, 7, 3])。src/game/combat.ts的facingOf计算,与act-scene.ts保持一致,采用连续弧度投影并就近四舍五入到 8 方向,确保怪物在各种移动矢量下模型朝向与追击方向严格对齐。