0

您好 Stack Overflow 用户,我在 XNA 游戏中遇到了一个有趣的问题。

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

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

http://i.imgur.com/dsawS.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);
        }

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

4

1 回答 1

0

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

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

我再次推荐第一个解决方案,因为当您想在屏幕中心绘制一个圆圈时,您只需将其位置设置为屏幕中心即可。你不需要考虑它的大小。等等。

于 2012-04-09T21:11:19.577 回答