2010-05-03 77 views
2

我在xna中製作了一個坦克必須在景觀上移動的遊戲。 我需要能夠找到坦克的底部,當它旋轉時,我可以讓它隨着玩家越過景觀而上下移動。XNA跟蹤旋轉的像素位置

例如,如果我有一個精靈在其左上角在400,300,我圍繞它的中心旋轉它的中心45度,我如何找到底部軌道的新位置。

感謝


感謝您的答覆Langaurd。

我看過文章鏈接之前,但沒有明白它是如何工作的。

我正在製作一個2D側滾動遊戲。當玩家向左和向右移動時,坦克也必須傾斜以跟隨地形的輪廓。

我有兩個矢量存儲軌道的底部和一個存儲軌道的底部底部。

我已經試過

Vector2 backBottom = new Vector2(5, 25); 
Vector2 frontBottom = new Vector2(5, 32); 

backBottom = Vector2.Transform(backBottom+position, Matrix.CreateRotationZ(angle)); 
frontBottom = Vector2.Transform(frontBottom+position, Matrix.CreateRotationZ(angle)); 

但給了我一些奇怪的值

回答

0

不是100%清楚它到底是什麼你正在嘗試做的。你提到一個精靈,它是2D的,但是你的描述是3D的。如果您正在做2D側視圖,那麼您無法判斷坦克是否旋轉了45度。如果你正在做2D自上而下的視圖,那麼你不應該關心tred的底部。

無論如何,有兩點建議。如果您在追蹤旋轉像素方面苦惱不堪,請閱讀creators.xna.com網站上的這篇文章:2D collision with Transformed Pixels。不過,我會建議追蹤向量。使用兩個矢量來表示軌道位置,然後使用Vector2.Transform來旋轉坦克。然後,您可以使用這些矢量來檢查軌道是否碰到某物,它們處於何種角度等等。

0

你需要爲你的精靈定義一個更清晰的方向。我會使用坦克的前部和向上矢量。現在,您可以將它們兩個一起旋轉,並根據地形將您的坦克驅動的角度旋轉。可以說這些向量是你精靈的中心。和你的精靈旋轉,就像你的向上和向前的向量。現在只需將你的Halfheight乘以-Up向量,你應該擁有你的本地最低中鋒,增加你的坦克位置,並且你擁有了你的世界底線位置。

重要提示:不要混淆一個點,它可以表示爲一個矢量,或一個沒有位置的真實矢量,只顯示方向。對於方向來說,標準化矢量很重要。

對不起,模糊的答案,但你的問題也有點含糊。