2011-09-07 50 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也是一个答案。