【问题标题】:Rotating a sprite around its center围绕其中心旋转精灵
【发布时间】:2013-07-18 02:30:19
【问题描述】:

我试图弄清楚如何使用 Draw 方法中的原点来围绕其中心旋转精灵。我希望有人能解释 Draw 方法中 origin 参数的正确用法。

如果我使用以下 Draw 方法(未指定任何旋转和原点),则对象将绘制在正确/预期的位置:

spriteBatch.Draw(myTexture, destinationRectangle, null, Color.White, 0.0f, Vector2.Zero, SpriteEffects.None, 0);

但是,如果我使用如下所示的原点和旋转,则旋转的对象是中心,但对象漂浮在预期位置上方(大约 20 像素。)

Vector2 origin = new Vector2(myTexture.Width / 2 , myTexture.Height / 2 );
spriteBatch.Draw(myTexture, destinationRectangle, null, Color.White, ballRotation, origin, SpriteEffects.None, 0);

即使我将 ballRotation 设置为 0,对象仍会绘制在预期位置上方

spriteBatch.Draw(myTexture, destinationRectangle, null, Color.White, 0.0f, origin, SpriteEffects.None, 0);

似乎只是通过设置原点,对象的位置发生了变化。

谁能告诉我如何正确使用 origin 参数。


解决方案:

Davor 的回答清楚地说明了 origin 的用法。 代码中需要进行以下更改才能使其正常工作:

Vector2 origin = new Vector2(myTexture.Width / 2 , myTexture.Height / 2 );
destinationRectangle.X += destinationRectangle.Width/2;
destinationRectangle.Y += destinationRectangle.Height / 2;
spriteBatch.Draw(myTexture, destinationRectangle, null, Color.White, ballRotation, origin, SpriteEffects.None, 0);

【问题讨论】:

    标签: xna xna-4.0


    【解决方案1】:

    这是对原点的正确使用。但是现在你的位置也变成了中心,它不再在左上角,它在中心。 width/2height/2 从设置原点之前的位置浮动。

    因此,如果您的纹理是 20x20,则需要将 X 减去 10(宽度/2)和 Y 减去 10(高度/2),您将获得原始位置。

    【讨论】:

    • 这是有道理的。所以看起来我们在draw方法中指定的位置是针对原点而不是针对对象的起始位置。
    • 你不是说 Y 乘以 10(高度/2)吗?
    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多