我正在教自己将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;
}
答案 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轴被翻转,角度的含义也会被翻转)。