C# XNA旋转帮助(有趣的…)

C# XNA旋转帮助(有趣的…),c#,xna,C#,Xna,你好堆栈溢出用户,我有一个有趣的问题,我在我的XNA游戏 所以基本上我有一颗小行星,80x80,我把原点设为imageW/2,imageH/2(如果顺序重要,它就不重要了,小行星是正方形的) 这是一张图片,解释问题!可视化FTW:D 那么,你知道是什么导致了这一切吗?我花了1个小时,看了一些例子,我发现它应该像这样旋转: 但事实并非如此 下面是一个代码示例。我有一个名为Drawable的对象,它具有保持向量位置等属性 Vector2 asteroidOrigin = new Vector2(

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

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

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

那么,你知道是什么导致了这一切吗?我花了1个小时,看了一些例子,我发现它应该像这样旋转:

但事实并非如此

下面是一个代码示例。我有一个名为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类有多个构造函数,它们指定默认值。

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

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


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

请发布相关代码,以便我们了解问题所在。好吧,我刚做了Dr_Asik,但我绘制东西的方式非常复杂:你调试过吗?在foreach循环中放置一个断点,并在每次迭代中单步执行,同时将鼠标悬停在原点值上,查看它是否保持预期值。是的,我知道如何调试,并且Vector2位置与矩形位置相同。我想是因为原点变成了向量2点?