我正在做一个简单的突破游戏,我有一些问题要理解我应该如何处理球的速度和方向以在不同的对角线路径中移动它。我在更新方法中使用此代码:
xPos += xSpeed * direction;
yPos += ySpeed * direction;
如果我使用xSpeed = 2
和YSpeed = 1
的不同vaules,我可以更改为不同的对角线路径,但我仍然需要相同的速度。如果我增加xSpeed = 4
的值以获得另一条对角线路径,那么速度也会增加,我希望球以相同的速度移动。对于direction
的值,我使用1或-1。但我想最好更改direction
的值来获得度数的对角线路径?在突破性的比赛中,球必须在oppesite方向上反弹。我的数学不好,所以我会提前帮助解决这个问题。我有什么想法可以改进我的代码吗?
答案 0 :(得分:4)
您可以使用sine
和cosine
函数获取x
和y
轴的相对移动。
像:
xPos += speed * Math.sin(movementAngle);
yPos += speed * Math.cos(movementAngle);
在各种动画中使用上述(polar coordinates)具有易于调整方向或移动速度(分别为speed
和movementAngle
变量)的优点。使用笛卡尔坐标(x
和y
位置)时,移动速度或移动方向都需要对x
和y
进行非显而易见的更改。
上述解决方案中的公式只不过是从极坐标到笛卡尔坐标的转换。
修改以获得更“自然”的行为,当movementAngle
0
表示向右移动时,PI/2
- 向上,PI
- 左和3*PI/2
- 右,使用以下内容:
xPos += speed * Math.cos(-1*movementAngle);
yPos += speed * Math.sin(-1*movementAngle);