移动精灵的方向

4

我正在开发一个简单的打砖块游戏,但是在理解如何处理球的速度和方向以使其沿不同的对角线路径移动时遇到了一些问题。我在update方法中使用了以下代码:

xPos += xSpeed * direction;
yPos += ySpeed * direction;

如果我使用不同的值xSpeed = 2ySpeed = 1,我可以改变不同的对角线路径,但我仍然希望保持相同的速度。如果我增加xSpeed = 4的值以获得另一条对角线路径,则速度也会增加,但我希望球以相同的速度移动。对于direction的值,我使用1或-1。但我想也许更好的做法是通过改变direction的值来获得不同度数的对角线路径?在一个打砖块游戏中,球必须反弹并朝相反的方向移动。我不擅长数学,因此我希望得到一些帮助来解决这个问题。有什么想法可以改进我的代码吗?

1个回答

4
您可以使用正弦和余弦函数来获取X和Y轴的相对运动。

例如:

xPos += speed * Math.sin(movementAngle);
yPos += speed * Math.cos(movementAngle);

使用极坐标(极坐标)在各种动画中的优势在于易于修改运动方向或速度(分别是speedmovementAngle变量)。当使用笛卡尔坐标(xy位置)时,改变速度或运动方向将需要对xy进行非明显的更改。
上述解决方案中的公式仅是从极坐标到笛卡尔坐标的转换。
编辑:为了获得更“自然”的行为,当movementAngle0表示向右移动,PI/2 - 向上,PI - 向左和3*PI/2 - 向下,请使用以下内容:
xPos += speed * Math.cos(-1*movementAngle);
yPos += speed * Math.sin(-1*movementAngle);

运动角度是以弧度还是角度表示的? - 3D-kreativ
@3D-kreativ - 在Math.sin()中,它是弧度。请参阅文档 - kamituel
@3D-kreativ - 对于180度(PI),sin(PI) = 0cos(PI) = -1,因此xPos不变而yPos减少,从而向上移动。如果将角度设置为90度(PI/2),则会得到sin(PI/2) = 1cos(PI/2) = 0,这意味着向右方向。这被称为极坐标系 - kamituel
通常,角度的余弦值给出移动的x分量,而角度的正弦值给出移动的y分量。这意味着方向从0度=东开始,并逆时针旋转,这是方向的惯例。 - Patashu
@Patashu,你说得对,如果考虑笛卡尔坐标系可能会更清晰一些;我会更新答案的。 - kamituel
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接