移动精灵的方向

问题描述:

我正在做一个简单的突破游戏,我有一些问题需要理解我应该如何处理球的速度和方向以将其移动到不同的对角线路径。我使用这个代码的更新方法:移动精灵的方向

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

如果我使用的xSpeed = 2YSpeed = 1不同vaules我可以换到不同的对角线路径,但我还是想以相同的速度。如果我增加值xSpeed = 4以获得另一条对角线路径,则速度也会增加,并且我希望球以相同的速度移动。对于direction的值,我使用1或-1。但我想最好将direction的值改为获得对角线路径度数?在突破性的比赛中,球必须在oppesite方向上反弹。我数学不好,所以我会提供一些帮助来解决这个问题。任何想法如何改善我的代码?

您可以使用sinecosine函数来获取轴的相对运动xy轴。

喜欢:

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

在各种动画使用上述(polar coordinates)具有modyfing方向或运动的速度(其分别speedmovementAngle变量)容易的优点。当使用笛卡尔坐标(xy位置)时,如果要改变速度或移动方向,则需要对xy进行非显而易见的更改。

上述解决方案中的公式只不过是从极坐标到笛卡尔坐标的转换。

编辑:,以获得更 “自然” 的行为,当0movementAngle指向右移动,PI/2 - 起来,PI - 左,3*PI/2 - 右边,使用以下命令:

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

是运动弧度或度数的角度? – 2013-03-28 07:40:29

+0

@ 3D-kreativ - 如果Math.sin()是弧度。 [请参阅文档](http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#sin(double))。 – kamituel 2013-03-28 07:43:18

+0

我猜这是工作,我使用这段代码: double angle = Math.toRadians(180); xPos + =速度* Math.sin(angle); yPos + =速度* Math.cos(angle); 我只是有点困惑,180度到了,我以为90度了!?我是否在sin和cos中使用相同的可变角度? – 2013-03-28 07:56:26