如何使精灵指向鼠标。 XNA C#

发布于 2024-09-11 17:28:35 字数 168 浏览 8 评论 0原文

如果您查看此图链接文本,我需要找到角度A只需知道直角三角形所有边的长度。

我不知道三角函数,需要一些帮助。

If you would look at this diagram link text, I need to find angle A by only knowing the length of all sides of a right triangle.

I don't know trig and need some help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

段念尘 2024-09-18 17:28:35

您的帖子实际上有两个问题。

如何使精灵指向鼠标。 XNA C#:

您必须计算精灵位置和鼠标位置之间的方向。
这可以使用三角函数来完成。在本例中:Arctangens2

那么让我们使用数学库:

MouseState mouseState = Mouse.GetState();
Math.Atan2((double)mouseState.Y - sprite.Y, (double)mouseState.X - sprite.X); //this will return the angle(in radians) from sprite to mouse.

在三角函数示例中,您将看到这些值实际上是:

Math.Atan2(BC, AC);

或者

Math.Atan2(Ydiff, Xdiff);

我希望这有帮助 =D

干杯,

TomHashNL

There are actually 2 questions in your post.

How to make a sprite point at the mouse. XNA C#:

You will have to calculate the direction between the position of the sprite and the position of the mouse.
This can be done using trigonometry functions. In this case: Arctangens2

So let's use the math library:

MouseState mouseState = Mouse.GetState();
Math.Atan2((double)mouseState.Y - sprite.Y, (double)mouseState.X - sprite.X); //this will return the angle(in radians) from sprite to mouse.

In your trigonometry example you will see that those values actually are:

Math.Atan2(BC, AC);

or

Math.Atan2(Ydiff, Xdiff);

I hope this helps =D

Cheers,

TomHashNL

飘落散花 2024-09-18 17:28:35

我发现我的最终解决方案是:

Vector2 direction = targetPosition - currentPosition;
direction.Normalize();
float rotationInRadians = (float)Math.Atan2((double)direction.Y, 
                             (double)direction.X) + MathHelper.PiOver2;

rotationInRadians 是一个原始值,可以传递到精灵批次以获得正确的旋转量 - 不需要进一步的代码。此外,如果您在角落而不是中间旋转精灵,您可能会注意到不正确的结果。

I found my final solution to be:

Vector2 direction = targetPosition - currentPosition;
direction.Normalize();
float rotationInRadians = (float)Math.Atan2((double)direction.Y, 
                             (double)direction.X) + MathHelper.PiOver2;

rotationInRadians is a raw value that can be passed to the sprite batch for the correct rotation amount--no further code is needed. Also, you may notice incorrect results if you're rotating the sprite on a corner rather than the middle.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文