XNA旋转精灵以确保面向光标

4
我一直在尝试使用XNA使精灵面向我的鼠标指针,它几乎完美地工作了,但是它指向鼠标指针的是精灵面的角而不是中心...这对于某些需要将精灵中心面向鼠标指针的游戏来说不太好,我想知道是否有一种方法可以从特定点开始指向...这听起来很困惑,但我希望有人能理解:)
以下是我正在使用的代码:
获取角度的代码:
direction = mousePos - position;
rotation = (float)Math.Atan2(direction.Y, direction.X);

绘制精灵:

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

所以,如果这是我的精灵:[ ],它的左上角将指向光标,而不是中心:P。

尝试使用 rotation + 45rotation - 45 - thedaian
你是否正确地将 origin 设置为精灵的中心? - Andrew Russell
5个回答

4

不要加90。无论你做什么,Atan2函数都会以弧度返回角度(一旦你开始使用它们,弧度比度数更好)。所以添加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 来进行配置。

文档在这里。 我认为这个也是一个答案。


0

嗨,在XNA中他们没有度数,而是有其他我不知道名称的东西。这意味着pi等于180度,为了得到90度,只需取3.14/2 = 1.57。

所以:旋转+1.57


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

看起来不太好看,但避免创建新的Vector2将有助于节省一些帧率 :)


好的,说得对,但你有任何想法我该如何做我需要的事情吗? :) - ben sandwick
哦,等等,抱歉,我没有仔细阅读,我以为你只是把它分开了:') 我会尝试的 ^^ - ben sandwick
那似乎给出了完全相同的结果:/ - ben sandwick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接