C# MonoGame小行星克隆项目玩家后退移动异常问题咨询
问题根因
你实现向后移动的代码存在运算逻辑错误,不符合极坐标方向向量的计算规则:
- 向上键的逻辑是正确的:
Math.Cos(rotation)和Math.Sin(rotation)会计算出玩家当前朝向的单位向量的X、Y分量,乘以速度系数tangentialVelocity就能得到朝向方向的速度矢量。 - 你写的向下键逻辑误用了减法运算符,相当于把单位向量的分量直接减去速度值,得到的结果完全不符合预期的反方向速度矢量。
修复方案
向后移动只需要在朝向方向的速度基础上取负值即可,把向下键的代码修改为以下内容:
if (Keyboard.GetState().IsKeyDown(Keys.Down)) { velocity.X = (float)Math.Cos(rotation) * -tangentialVelocity; velocity.Y = (float)Math.Sin(rotation) * -tangentialVelocity; }
额外优化建议
当前你按下上下键时是直接给velocity赋值固定值,如果想要实现更符合小行星原版的惯性移动效果,可以改为按下按键时给速度叠加对应方向的加速度,而不是直接覆盖速度值,同时保留现有的摩擦减速逻辑即可。
内容的提问来源于stack exchange,提问作者keano-
相关产品推荐
相关产品推荐

