2012-04-08 70 views
0

您好堆棧溢出的用戶,我有一個有趣的問題,我在我的XNA Game。所以基本上我有一個小行星,80x80,我設置原點爲imageW/2,imageH/2(如果順序很重要,它不會,小行星是一個正方形)。XNA旋轉幫助(有趣的...)

這裏是一個圖像,解釋的問題!可視化FTW:d

http://i.imgur.com/dsawS.png

那麼,是什麼原因造成這種任何想法?我花了1個小時,我看了一下例子,我發現它應該轉動這樣的:

http://www.riemers.net/images/Tutorials/XNA/Csharp/Series2D/rotation.jpg

但事實並非如此。

這是一個代碼示例。我有,叫繪製對象一個對象,它具有保持載體position屬性等

Vector2 asteroidOrigin = new Vector2(asteroidImgs[asteroid.asteroidType].Width/2, asteroidImgs[asteroid.asteroidType].Height/2); 

drawableList.Add(new Drawable(asteroidImgs[asteroid.asteroidType], asteroid.asteroidPos, asteroid.angle, asteroidOrigin)); 

這裏是繪製方法:

foreach (Drawable drawable in renderManager.getRenderList) 
     { 
      spriteBatch.Draw(drawable.image, drawable.position, drawable.sourceRectangle, drawable.tint, drawable.angle, drawable.origin, drawable.imageScale, drawable.spriteEffects, drawable.depth); 
     } 

是的,在繪製對象類有多個構造函數,它們指定默認值。

+0

請發表您的相關代碼,以便我們可以看到問題所在。 – Asik 2012-04-08 01:11:50

+0

好吧,我只是做了Dr_Asik,但我畫我的東西的方式是非常複雜的:P – 2012-04-08 01:22:28

+1

你有沒有調試呢?在foreach循環中放置一個斷點,並將鼠標懸停在原始值上以查看它是否包含期望值。 – 2012-04-08 14:25:46

回答

0

當你定義在SpriteBatch.Draw原點,你定義在你的紋理新的點,將在該位置的參數得出。顯然這會影響翻譯以及您想要的旋轉。當您將原點設置爲圖像的中心時,圖像將被平移,以便中心位於您的位置,然後圍繞該點旋轉。將原點設置爲Vector2.Zero時,平移不會更改,但圖像會圍繞其左上角旋轉。

解決的辦法是重新定義你的意思是「位置」的精靈是圖像的CENTER在屏幕上繪製的位置(我推薦這個,使事情變得更好),或者在繪製之前執行一些工作,調用Draw之前的位置。

我再次建議第一個解決方案,因爲當你想繪製在屏幕中央的圓你可以設置它的位置是在屏幕的中心,並完成。您不需要考慮其大小。等等。

+0

是的,就像我懷疑的一樣。 – 2012-04-10 20:44:49