2011-09-07 99 views
4

我一直在試圖讓一個精靈使用XNA來面對我的光標,它的工作原理幾乎完美,但是不是精靈面部的中心,而是點到遊標......這對於一個遊戲來說並不好,因爲遊戲中精靈中心的某些東西必須面向遊標,只是想知道是否有辦法讓它從某一點指向......這聽起來很混亂,但我希望有人XNA旋轉一個精靈來正對光標

拿到角度:

direction = mousePos - position; 
rotation = (float)Math.Atan2(direction.Y, direction.X); 
得到它使用:)

繼承人的代碼IM

繪製精靈:

spriteBatch.Begin(); 
spriteBatch.Draw(sprite, position, null, Color.White, rotation + 90, origin, 1.0f, SpriteEffects.None, 0); 
spriteBatch.End(); 

所以如果這是我的精靈:[]左上角將指向遊標,而不是中間的:P

+0

嘗試使用「旋轉+ 45」或「旋轉-45」 – thedaian

+0

您是否將「原點」設置爲正確的精靈中心? –

回答

0
direction.x = mousePos.x - (position.x + spriteWidth/2); 
direction.y = mousePos.y - (position.y + spriteHeight/2); 

它看起來醜陋,但要避免創建一個新的vector2將有助於節省一些fps :)

+0

好吧,夠公平的,但任何想法,我怎麼能做我需要的? :) –

+0

哦,等等,對不起,我沒有正確閱讀,我以爲你只是把它分開:')生病嘗試^^ –

+0

這似乎給出了完全相同的結果:/ –

4

不要添加90.無論你做什麼。 Atan2函數將返回Radians中的角度(一旦開始使用它們,會比度數好得多)。因此添加90會立即拋出。

如果你想改變圖像的旋轉90度,那麼你需要添加一半的PI值(360度= 2xPI)。

所以這應該照顧它。

spriteBatch.Draw(sprite, position, null, Color.White, rotation + (Math.PI*0.5f), origin, 1.0f, SpriteEffects.None, 0); 
1

我不知道,如果添加90傷害的最終結果或不喜歡的人我上面說的,但爲什麼精靈角朝向烏爾鼠標的原因是因爲在XNA它採用了左上角最精靈的點作爲原點。將其設置爲精靈的中心並解決問題。

是這個樣子:

spriteBatch.Draw(sprite, position, null, Color.White, rotation + 90,new Vector2(sprite.Width /2, sprite.Height /2) , 1.0f, SpriteEffects.None, 0); 

這將其設置爲精靈質感的相對中間。

0

如果7年後還想回答xD 您需要設置WindowHandle。

Mouse應該默認爲相對於遊戲 窗口的位置報告,但可以通過指定相應的窗口 手柄Mouse.WindowHandle進行配置。

該文檔是here。 我認爲this也是一個答案。