2009-08-25 60 views
2

進入玩家控制坦克的2D遊戲。XNA正確旋轉坦克

我可以做坦克,以及所有,但什麼真正用腦子搞亂是如何使它相應地旋轉。

我希望它的行爲就像Wii遊戲坦克一樣。 固定方向,坦克上沒有真正的正面和背面。

向上行駛,然後左轉應該向左旋轉。 向上行駛,然後向下不應該使其旋轉,只是驅動另一個方向。

我紅教程而回的一些方式通過將度爲2個的180度部分做到這一點。但我根本無法再找到那個該死的網站。

我希望你們能明白我想說什麼。 感謝提前:)

+0

上下你是在談論前進還是後退? – Lazarus 2009-08-25 14:01:32

+0

正確:)向前和向後 – Moulde 2009-08-25 17:38:27

+0

我仍然在尋找與旋轉使用一些方法,角度作爲參數的方法,然後返回它分成兩個角度或類似的東西的網站。 – Moulde 2009-08-25 17:42:29

回答

2

我認爲你在尋找什麼很簡單,就是儘量減少坦克,模180度的旋轉的最佳途徑。

我會用所期望的移動方向和坦克的當前方向開始之間的角度。確保這是最小角度,然後將其與坦克當前方向+ 180度之間的角度進行比較。例如:

// smallest angle between the current direction and the desired direction 
minAngle1 = Math.Abs(Math.Min(tankAngle - desiredAngle, desiredAngle - tankAngle)); 

// smallest angle between the opposite direction and the desired direction 
oppositeAngle = (tankAngle + 180) % 360; 
minAngle2 = Math.Abs(Math.Min(oppositeAngle - desiredAngle, desiredAngle - oppositeAngle)); 

// get the smaller of two to rotate to 
if (minAngle1 < minAngle2) { 
    // we know that we should rotate the current direction to the desired direction 
} else { 
    // rotate the opposing direction to the desired direction 
} 

請注意,您需要使用旋轉標誌來確保旋轉方向正確。此外,我假定你知道你的旋轉角度,如果你有矢量,你可以通過使用兩個矢量之間的點積而不是比較角度來簡化這一點。

4

我假設你正在繪製你的坦克作爲一個精靈?在這種情況下,會出現SpriteBatch.Draw方法的重載,它允許您指定原點周圍的旋轉角度。

SpriteBatch.Draw overload

如何使用它從MSDN

上面的例子將不斷旋轉你的精靈,所以你需要添加一些自定義邏輯,所以它只會根據鍵盤輸入旋轉它Here's an exampleHere's a simple example關於如何檢查鍵盤輸入。因此,添加檢查是否按下了右鍵或左鍵的邏輯,如果有,則更新旋轉角度。如果它是按下的向上或向下按鈕,你只需修改你的精靈的位置。

我希望它是有道理的,否則只是讓我知道。

+0

是的,我得到了所有:) 我想要的是坦克決定哪種方式坦克旋轉時,我想它移動。 – Moulde 2009-08-25 17:41:31

0

基於旋轉角度的運動方向是否存在問題?

Vector2 moveDir = new Vector2(Math.Cos(rotation), Math.Sin(rotation)); 
position += (moveDir * speed); 

這裏的速度會是一個數字,表示您想要朝這個方向移動多快。位置是精靈位置的另一個Vector2。正如Tchami說的那樣,你可以使用SpriteBatch.Draw重載進行旋轉繪製。 Cos和Sin方法的旋轉應該用弧度表示,但如果我沒有記錯,我認爲Draw應該是度數。 MathHelper.ToRadians(度)和MathHelper.ToDegrees(弧度)應該可以解決這個問題。

有很多XNA教程和示例的網站上http://creators.xna.com/en-US/education/catalog/

+0

沒有我的問題是,當我告訴它去某個地方時,我希望我的坦克旋轉的可能性最小。 – Moulde 2009-08-25 17:40:37