【问题标题】:Drawing a sourcerectangle from a spritesheet doesn't seem to work (Monogame)从 spritesheet 绘制 sourcerectangle 似乎不起作用(Monogame)
【发布时间】:2020-11-22 10:36:44
【问题描述】:

已解决

我正在使用 monogame 制作基本的 2D 平台游戏。到目前为止还没有遇到太多问题,绘制整个spritesheet也没问题。

我想添加正在运行的动画,知道每个精灵都是 41 像素宽和 54 像素高,我将具有正确位置的这些尺寸的源矩形传递给绘图函数。由于某种原因,它现在不再绘制任何东西了。

这是我原来的 Draw 函数,它确实有效:

public virtual void Draw()
{
    if(sprite != null)
    {
        Globals.spriteBatch.Draw(sprite, new Rectangle((int)pos.X, (int)pos.Y, (int)dims.X, (int)dims.Y), null, Color.White, 0.0f, new Vector2(sprite.Bounds.Width / 2, sprite.Bounds.Height / 2), SpriteEffects.None, 0);
    }
}

这是一个带有不起作用的源矩形的那个:

public virtual void Draw(Rectangle frame)
{
    if (sprite != null)
    {
        Globals.spriteBatch.Draw(sprite, new Rectangle((int)pos.X, (int)pos.Y, (int)dims.X, (int)dims.Y), frame, Color.White, 0.0f, new Vector2(sprite.Bounds.Width / 2, sprite.Bounds.Height / 2), SpriteEffects.None, 0);
    }
}

它被播放器类中的覆盖绘制函数调用:

public override void Draw()
{
    base.Draw(new Rectangle(frame * 41, 0, 41, 54));
}

frame 变量使用以下公式在每一帧更新:

frame = (frame + 1) % 4;

【问题讨论】:

  • 您确定覆盖的Draw 方法中的frame 实际上在范围内吗?它应该有一个从 0 到 animationLength - 1 或这样的值。
  • frame 是一个介于 0 和 4 之间的值,我的 spritesheet 比这长得多,所以我认为这不应该是问题所在。我已经调试过,并且该值始终保持在它的范围内。
  • 你可以尝试传递new Rectangle(0, 0, (int)dims.X, (int)dims.Y)而不是框架吗?它绘制动画的第一帧吗? (假设dims 是精灵的尺寸,而不是纹理 - 如果不是,请更改它,或者你画的太多了)。我很难相信您发布的代码中有错误。确保 sprite 是您所期望的,并且在所有范围内都相同。
  • 我仍然有 dims 作为纹理尺寸,谢谢。这完全解决了它。
  • 如果这解决了您的问题,那么您可以将其发布为答案。

标签: c# monogame


【解决方案1】:

我忘记更新矩形的尺寸。它与源矩形本身无关。

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 2022-01-08
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2016-11-29
    • 2016-02-01
    • 2020-09-23
    相关资源
    最近更新 更多