Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MonoGame/XNA旋转图像_C#_Xna_Sprite_Monogame_Image Rotation - Fatal编程技术网

C# MonoGame/XNA旋转图像

C# MonoGame/XNA旋转图像,c#,xna,sprite,monogame,image-rotation,C#,Xna,Sprite,Monogame,Image Rotation,这个代码是用来画塔的。正方形位置位于正方形的左上角。瓦片大小只是正方形的尺寸 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.

这个代码是用来画塔的。正方形位置位于正方形的左上角。瓦片大小只是正方形的尺寸

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);
        }
我这样做是基于:

旋转真的很奇怪,下面是它通常的样子:

但当它旋转时,它是这样的:

最后,当它向下看的时候,它完全偏离了路径,它并没有按中心旋转,但整个图像都在移动,为什么它会这样做

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


它似乎是左上角点的旋转,我不知道为什么。有人能帮忙吗?

显然,您的精灵正在考虑将一个
矢量2.0
(或
矢量2(0,0)
)点作为旋转原点。这意味着
Texture2D
文件的左上角点

我看到您正在将
Draw
方法中的原点设置为
TILE\u SIZE-35
,这让我想知道,TILE是70像素W/H的正方形吗

如果将减法替换为
新矢量2(TowerImage.Width/2,TowerImage.Height/2)
,会发生什么情况

我将给您留下一个示例,从中可以轻松地解释如何始终按照鼠标位置旋转图像:

更新方法:

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();
绘制方法:

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

检查张贴的代码中旋转角度的计算结果是否与您的略有不同,但重要的代码是
绘制方法中原点的计算。

您是否尝试过
矢量2(sprite.width/2,sprite.height/2)
原点?我一定会尝试。此外,瓷砖大小等于路径和草地的纹理,它是40像素,出于某种原因,如果我使用瓷砖大小-35,它会将其放置在瓷砖中心周围,即使我使用瓷砖大小或其他东西,它也会将其放置得非常远。但是是的,它在左上角旋转,我不知道为什么。即使在调整后,这是一个巨大的旋转,变得难以控制。我明天会试试那个教程。太好了,如果没用请告诉我,我会在我的家用电脑上试试:)谢谢!图像宽度/2起作用了,我怎么这么笨。。我试着移动它的原点等等。。。这根本不管用祝贺你!很高兴我能帮忙:)