【问题标题】:MonoGame/XNA rotating an imageMonoGame/XNA 旋转图像
【发布时间】:2014-09-03 23:17:22
【问题描述】:

此代码用于绘制塔。广场位置是广场的左上角。 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

旋转真的很奇怪,这是正常的样子:

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

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

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

它似乎在左上角旋转,我不知道为什么。有人可以帮忙吗?

【问题讨论】:

  • 您尝试过Vector2(sprite.width/2,sprite.height/2) 的来源吗?

标签: c# xna sprite monogame image-rotation


【解决方案1】:

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

我看到您将Draw 方法中的原点设置为TILE_SIZE - 35,这让我想知道,图块是宽高为 70 像素的正方形吗?

如果用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 方法中原点的计算。

【讨论】:

  • 我一定会尝试的。此外,TILE_SIZE 等于路径和草的纹理,它是 40 像素,出于某种原因,如果我执行 TILE_SIZE - 35 它会将它放在图块的中心附近,即使我执行了 -TILE_SIZE 或其他东西它确实如此离这很远。但是,是的,它围绕左上角旋转,我不知道为什么。即使经过调整,这也是一个难以控制的巨大旋转。我明天会试试那个教程。
  • 太好了,如果这没有帮助,请告诉我,我会在我的家用电脑上试试 :)
  • 谢谢! ImageWidth/2 起作用了,我怎么这么笨……我试着移动它的原点,等等……它从来没有用过
  • 恭喜!很高兴我能帮上忙:)
猜你喜欢
  • 2022-08-21
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 2021-10-06
  • 1970-01-01
相关资源
最近更新 更多