MonoGame / XNA旋转图像

时间:2014-09-03 23:17:22

标签: c# xna sprite monogame image-rotation

此代码用于绘制塔。广场位置是广场的左上角。 TILE_SIZE只是方形的尺寸。

SpriteBatch.Draw(TowerImage, new Rectangle(square.X * TILE_SIZE, square.Y * TILE_SIZE, TILE_SIZE, TILE_SIZE), null, Color.White, myTower.Rotation, 
    new Vector2(TILE_SIZE - 35, TILE_SIZE - 35), SpriteEffects.None, (float)0.0);

此代码是我确定旋转的方式

public void FaceTarget(Vector2 center, Vector2 enemyCenter)
        {
            Vector2 direction = center - enemyCenter;
            direction.Normalize();

            this.Rotation = (float)Math.Atan2(-direction.X, direction.Y);
        }

我这样做的基础是:

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Rotation.php

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Direction_to_Angle.php

轮换真的很奇怪,这就是它的正常表现:

http://puu.sh/bkd0E.png

但是当它旋转时它会像这样:

http://puu.sh/bkd6K.png

最后,当它向下看时,它会完全偏离路径,它不是通过它的中心旋转,但是整个图像正在移动它为什么要这样做?

http://i.stack.imgur.com/4PuiZ.jpg

只有第一张图像实际上是正确位置的塔

好像它是左上角的旋转,我不知道为什么。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

显然,您的精灵正在考虑作为Vector2.Zero(或Vector2(0,0))点的旋转原点。这意味着Texture2D文件的左上角。

我看到你将Draw方法中的原点设置为TILE_SIZE - 35这让我想知道,这块瓷砖是70像素W / H的正方形吗?

如果用new Vector2(TowerImage.Width / 2, TowerImage.Height / 2)替换减法会怎样?

我会给你一个this site的例子,它可以解释如何随时按照鼠标位置旋转图像:

更新方法:

MouseState mouse = Mouse.GetState();
mousePosition = new Vector2(mouse.X, mouse.Y);

Vector2 direction = mousePosition - position;
direction.Normalize();

rotation = (float)Math.Atan2(
              (double)direction.Y, 
              (double)direction.X);

绘制方法:

spriteBatch.Begin();

spriteBatch.Draw(
     rocket,
     position,
     null,
     Color.White,
     rotation,
     new Vector2(
         rocket.Width / 2, 
         rocket.Height / 2),
     1.0f,
     SpriteEffects.None,
     1.0f);

spriteBatch.End();

检查发布的代码中旋转角度的计算方法与您的略有不同,但重要的代码是Draw方法中原点的计算。