【问题标题】:Sprite in wrong direction方向错误的精灵
【发布时间】:2012-02-24 18:20:46
【问题描述】:

我使用一些代码来计算精灵的路径。精灵纹理的前面指向上方,这就是我想要移动精灵的方向,但现在,精灵的方向是精灵纹理的右侧!?因此,当我向新方向旋转它时,它会向侧面移动。我希望我的问题不是很清楚?如果有解决方案可以改变方向,使方向指向精灵纹理的上方,我们将非常感谢您的帮助。

 public override void Update()
    {
        direction = new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation));
        position += direction * speed;
    } 


public virtual void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, position, null, Color.White, rotation, origin, scale, SpriteEffects.None, 0f);
    }

【问题讨论】:

  • 代码在我看来是正确的,可能是您的图像朝向错误的方向。在您的绘图应用中,向上 == 正确。
  • 您的CosSin 呼叫方式是否正确。如果在 Vector2 构造函数中交换它们会发生什么?
  • 我想最简单的方法是改变纹理使其面向当时,但如果宇宙飞船朝上,它看起来会更好,因为这是一个小行星游戏。
  • Vector2 构造函数?我在方法中进行了交换,但没有奏效!?

标签: c# xna


【解决方案1】:

简单修复:

// Change it to +MathHelper.PiOver2 if it goes the wrong way
spriteBatch.Draw(texture, position, null, Color.White, rotation-MathHelper.PiOver2, origin, scale, SpriteEffects.None, 0f);

绘制时只需从旋转中减去(或添加)90 度

【讨论】:

  • 有趣,但这只是改变了精灵面朝上,但它仍然向右割草!?你能帮我更多吗?
  • 更改rotation的所有实例,如我的示例所示
  • 嗯,现在我明白了!谢谢!但是我仍然想知道为什么-90度不是直接向上,而是指向左边?不是向右0度然后逆时针向上-90度吗?
  • 旋转是以弧度为单位的,所以你可能还没有转换它。对于 90 度,我建议您使用 MathHelper.PiOver2,因为它需要更少的计算。
  • 在计算机图形学中,0 度不是垂直的
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
相关资源
最近更新 更多