我正在做一个简单的突破游戏,我有一些问题要理解我应该如何处理球的速度和方向,以便在不同的对角线路径中移动它.我在更新方法中使用此代码:
xPos += xSpeed * direction;
yPos += ySpeed * direction;
如果我使用xSpeed = 2和YSpeed = 1的不同vaules,我可以改为不同的对角线路径,但我仍然想要相同的速度.如果我增加xSpeed = 4的值以获得另一个对角线路径,那么速度也会增加,我希望球以相同的速度移动.对于方向的值,我使用1或-1.但我想改变方向的值以获得度数的对角线路径会更好吗?在突破性的比赛中,球必须在oppesite方向上反弹.我的数学不好,所以我会提前帮助解决这个问题.我有什么想法可以改进我的代码?
解决方法:
您可以使用正弦和余弦函数来获得x和y轴的相对运动.
喜欢:
xPos += speed * Math.sin(movementAngle);
yPos += speed * Math.cos(movementAngle);
在各种动画中使用上述(polar coordinates)具有易于调整方向或移动速度(分别是速度和移动角度变量)的优点.当使用笛卡尔坐标(x和y位置)时,改变速度或移动方向将需要对x和y进行非明显的改变.
上述解决方案中的公式只不过是从极坐标到笛卡尔坐标的转换.
编辑:为了获得更“自然”的行为,当moveAngle为0意味着向右移动时,PI / 2-up,PI-left和3 * PI / 2-right,请使用以下内容:
xPos += speed * Math.cos(-1*movementAngle);
yPos += speed * Math.sin(-1*movementAngle);
标签:java,math,direction
来源: https://codeday.me/bug/20190625/1285173.html