2013-03-28 145 views
4

我正在做一個簡單的突破遊戲,我有一些問題需要理解我應該如何處理球的速度和方向以將其移動到不同的對角線路徑。我使用這個代碼的更新方法:移動精靈的方向

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

如果我使用的xSpeed = 2YSpeed = 1不同vaules我可以換到不同的對角線路徑,但我還是想以相同的速度。如果我增加值xSpeed = 4以獲得另一條對角線路徑,則速度也會增加,並且我希望球以相同的速度移動。對於direction的值,我使用1或-1。但我想最好將direction的值改爲獲得對角線路徑度數?在突破性的比賽中,球必須在oppesite方向上反彈。我數學不好,所以我會提供一些幫助來解決這個問題。任何想法如何改善我的代碼?

回答

4

您可以使用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