经典的“Asteroids"控制-船向侧面移动

本文关键字:控制 -船 向侧面 移动 quot Asteroids 经典 | 更新日期: 2023-09-27 18:17:46

我正在自学制作一款2D射击游戏《Asteroids》,换句话说:按左键和右键将使飞船转向,按前进键将使飞船朝着它转向的方向移动。

我设法把船弄到它面对的方向,但是是侧向的。

船舶运动的代码相当简单,希望解决方案也同样简单。

我做错了什么?船为什么偏了?欢呼。

float velocity = 5f;
double angle = 0;
Vector2 trajectory = new Vector2(velocity) * new Vector2((float)Math.Cos((double)angle,(float)Math.Sin((double)angle));
if (Keyboard.GetState().IsKeyDown(Keys.Up))
        {
            location += trajectory;   
        }

经典的“Asteroids"控制-船向侧面移动

考虑到您所展示的代码,并没有太多要深入研究的内容,但是我想研究两件事。

首先,你的计算可能是正确的,但是你可能把画歪了。

第二,你的三角计算可能会被交换。因为正弦和余弦是彼此90度的相移,把它们放在错误的方向上很可能会表现为移动到侧面。你需要确保你的计算符合你的坐标系。

不是真正的确定的解决方案,更多的只是一些要检查的东西,但是,正如解释的那样,如果您提供更多的细节,您可能会得到更好的答案。

查看维基百科关于笛卡尔坐标的文章。还有三角函数(特别是关于单位圆的部分)。

要获得一个角度的矢量,你可以使用(正如你在你的帖子中所使用的)x = cos(angle)y = sin(angle)(不要忘记这些方法以弧度为角度,而不是角度)。

如果你在公式中输入一个0的角度,你会得到一个沿着X轴运动的轨迹。我猜你的宇宙飞船图像是面向向上的?因此出现了横向移动。

当然,解决方法是让精灵指向0度(即:让它面向右)。或者,如果你不想修改图像,在旋转之前为你的角度添加一个固定的90度偏移,以补偿。

它比这更复杂一点-因为XNA的SpriteBatch使用客户端(不是笛卡尔)坐标系,其中Y轴翻转(Y+向下,而不是向上)。旋转公式保持不变,在数学上仍然是正确的。但是你可能需要切换左/右键是否增加/减少角度(因为Y轴被翻转了,角度的含义也被翻转了)。