2015-01-16 55 views
0

我需要找到精靈的頂點或其座標。libgdx - 查找精靈上邊緣的座標?

我基本上正在做一個遊戲,用戶可以移動和旋轉精靈。 這個精靈是一個箭頭,當它停止旋轉時,我必須找到它的座標,以箭頭的方向繼續。 我認爲要在原點和精靈的上邊緣之間派生一個向量,該向量對應於箭頭的尖端。 而'可能添加一個錨點來指向orirgine?

回答

0

我要回答一個不同的問題,因爲你的問題是基於錯誤的假設。計算精靈的起源和精靈的頂端之間的方向是一個不好的主意。這是不必要的複雜。

你需要什麼來得到你想要的結果,是一些簡單的三角函數。基本上,你正在嘗試採取線性(x,y)運動並將其轉換爲任意方向。

我不會給你一個很複雜的解釋,爲什麼這會起作用,但是你要找的是Math java模塊中內置的兩個trig函數:Sin和Cos假設你已經在旋轉Sprite,並且您可以訪問它的旋轉角度(可能只是sprite.getRotation()),這樣做:

setX(getX() + (Math.sin(Math.toDegrees(myAngle)) * speed)) 
setY(getY() + (Math.cos(Math.toDegrees(myAngle)) * speed)) 

如果你使用Box2D的移動實體,則只需撥打applyLinearImpulse或applyForce其中x和y參數分別是setX()和setY()中的方程式。

在這種情況下,每幀應該更新myAngle以存儲精靈的當前角度。如果默認情況下弧度或度數是弧度或度數,我不記得,但是如果它已經是度數,那麼顯然你不需要通過Math.toDegrees()來傳遞它,這樣做會給你帶來奇怪的結果。速度是您希望實體移動的速度,以像素爲單位。

過長的解釋:想象一下當你將一個物體從理論圓的中心移動到基於物體所指向的方向上的某個點上時,你想要做什麼。這個假設圓的半徑是物體移動的「速度」。因此,要根據圓的原點,根據方向和原點找到圓上的點,請使用三角函數。

任何角度的正弦值將介於0和1之間(0和90度),但它適當地縮放以使得角度越大,數字越慢(與圓弧相關,所以例如,如果一個物體在一個圓圈內移動,並且只追蹤其移動的x座標,那麼它看起來像一個擺錘 - 請參閱:http://upload.wikimedia.org/wikipedia/commons/3/3b/Circle_cos_sin.gif)。

餘弦恰好與正弦相反,實際上,所以在接近90度時它會變小。既然這些數字的最高值是1,你可以將它們乘以半徑,並且假定它們彼此相反,它們將提供圓上的點。

我不知道這是否有道理,我從來沒有擅長解釋這樣的事情。