XNA旋转帮助(有趣..).

本文关键字:有趣 帮助 旋转 XNA | 更新日期: 2023-09-27 18:30:27

你好堆栈溢出用户,我在XNA游戏中遇到了一个有趣的问题。

所以基本上我有一颗小行星,80x80,我将原点设置为imageW/2,imageH/2(如果顺序重要,那就不重要了,小行星是一个正方形)。

这是一张图片,解释了问题!可视化 FTW :D

https://i.stack.imgur.com/9ymeg.png

那么,关于导致这种情况的原因的任何想法?我花了 1 个小时,我看了示例,我发现它应该像这样旋转:

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

但事实并非如此。

下面是一个代码示例。 我有一个名为 Drawable 的对象,它具有保存矢量位置等的属性。

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);
        }

是的,可绘制类有多个构造函数,它们分配默认值。

XNA旋转帮助(有趣..).

当您在 SpriteBatch.Draw 中定义原点时,您将在纹理上定义将在 Position 参数处绘制的新点。显然,这会影响翻译以及您想要的轮换。将原点设置为图像的中心时,图像将被平移,使中心位于您的位置,然后围绕该点旋转。将原点设置为 Vector2.Zero 时,平移不会更改,但图像会围绕其左上角旋转。

解决方案是重新定义你的意思是"位置",让精灵成为图像中心在屏幕上绘制的位置(我建议这样做,让事情变得不错),或者在绘制之前通过将原点添加到位置来执行一些工作在调用 Draw 之前。

我再次推荐第一种解决方案,因为当您想在屏幕中央画一个圆时,您只需将其位置设置为屏幕中心即可完成。您无需考虑其大小。等等。