2012-04-08 68 views
0

您好堆栈溢出的用户,我有一个有趣的问题,我在我的XNA Game。所以基本上我有一个小行星,80x80,我设置原点为imageW/2,imageH/2(如果顺序很重要,它不会,小行星是一个正方形)。XNA旋转帮助(有趣的...)

这里是一个图像,解释的问题!可视化FTW:d

http://i.imgur.com/dsawS.png

那么,是什么原因造成这种任何想法?我花了1个小时,我看了一下例子,我发现它应该转动这样的:

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

但事实并非如此。

这是一个代码示例。我有,叫绘制对象一个对象,它具有保持载体position属性等

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

是的,在绘制对象类有多个构造函数,它们指定默认值。

+0

请发表您的相关代码,以便我们可以看到问题所在。 – Asik 2012-04-08 01:11:50

+0

好吧,我只是做了Dr_Asik,但我画我的东西的方式是非常复杂的:P – 2012-04-08 01:22:28

+1

你有没有调试呢?在foreach循环中放置一个断点,并将鼠标悬停在原始值上以查看它是否包含期望值。 – 2012-04-08 14:25:46

回答

0

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

解决的办法是重新定义你的意思是“位置”的精灵是图像的CENTER在屏幕上绘制的位置(我推荐这个,使事情变得更好),或者在绘制之前执行一些工作,调用Draw之前的位置。

我再次建议第一个解决方案,因为当你想绘制在屏幕中央的圆你可以设置它的位置是在屏幕的中心,并完成。您不需要考虑其大小。等等。

+0

是的,就像我怀疑的一样。 – 2012-04-10 20:44:49