XNA轮换帮助(有趣......)

时间:2012-04-08 01:01:07

标签: c# xna

Hello 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 Class有多个构造函数,它们分配默认值。

1 个答案:

答案 0 :(得分:0)

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

解决方案是要重新定义你的意思,将精灵的“位置”设置为图像的中心在屏幕上绘制的位置(我推荐这个,让事情变得更好)或者在绘图之前通过添加Origin来执行一些工作在调用Draw之前的位置。

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

相关问题