经典的“小行星”控制 - 船舶横向移动?

时间:2013-06-08 21:49:52

标签: c# xna monogame

我正在教自己将2D射击游戏变成“小行星”,换句话说:按下左右键将使船转向,向前按压将使船向其转向方向移动。

我设法使船​​舶朝向它面向的方向,但侧身。

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

我做错了什么?为什么船要横行?欢呼声。

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;   
        }

2 个答案:

答案 0 :(得分:2)

根据您展示的代码,并没有太多的继续,但我会调查两件事。

首先,您的计算可能没问题,但您可能横向绘制船。

其次,您的触发计算可能会被交换。由于正弦和余弦相互之间有90度的相移,因此将它们绕向错误的方向可能会表现为横向移动。您需要确保计算符合您的坐标系。

不是真正的权威性解决方案,更多只是要检查的一些内容,但正如所解释的,如果您提供更多详细信息,您可能会得到更好的答案。

答案 1 :(得分:0)

查看cartesian coordinates的维基百科文章。还有Troigonometric functions(特别是关于单位圆圈的比特)。

获取您使用的角度的矢量(正如您在帖子中所示)x = cos(angle)y = sin(angle)(并且不要忘记这些方法在弧度中采用角度,而不是度。)

如果在该公式中输入角度0,则会有一条沿X轴行进的轨迹。我猜你的太空船图像正朝向向上?因此横向运动。

当然,解决方法是让你的精灵点朝向0度(即:使其朝向右侧)。或者,如果您不想修改图像,请在旋转前为您的角度添加固定的90度偏移,以进行补偿。

它比这复杂得多 - 因为XNA的SpriteBatch使用客户端(不是 cartesian )坐标系,其中Y轴被翻转( Y +下降,而不是上升)。所以旋转公式保持不变,它在数学上仍然是正确的。但您可能需要交换左/右键是否增加/减小角度(因为Y轴被翻转,角度的含义也会被翻转)。