【问题标题】:XNA spriteBatch.Draw - flickering spritesXNA spriteBatch.Draw - 闪烁的精灵
【发布时间】:2013-03-23 00:05:58
【问题描述】:

我正在 XNA 中编写精灵动画。我使用 spriteBatch.Draw 方法来做到这一点:

spriteBatch.Draw(waterTexture, waterPosition, rectWater, Color.White * 1.0f, 0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);
// 'rectWater' is rect used to cut sprite image from sprite texture

问题是它几乎可以工作,但在动画快结束时它会闪烁一次并继续动画。会是什么?

【问题讨论】:

  • 听起来你的这个精灵的动画有 1 帧太多。我们需要更多的代码来确定。

标签: c# xna spritebatch


【解决方案1】:

好的,我知道出了什么问题。

问题是,我有错误的算法来改变帧,它有时会跳到空白帧。看代码:

Rectangle rectWater = new Rectangle(((currentFrame % numerOfWaterSpriteFrames) % horizontalNumerOfWaterSpriteFrames) * (int)sizeOfWaterFrame.X, ((aktualnaFramka % numerOfWaterSpriteFrames) / horizontalNumerOfWaterSpriteFrames) * (int)sizeOfWaterFrame.Y, (int)sizeOfWaterFrame.X, (int)sizeOfWaterFrame.Y);
//The correct code

我没有在第一个和第二个 Rectangle 构造函数参数中通过 numerOfWaterSpriteFrames 调制 currentFrame。就像这样:

Rectangle rectWater = new Rectangle((currentFrame % horizontalNumerOfWaterSpriteFrames) * (int)sizeOfWaterFrame.X, (aktualnaFramka / horizontalNumerOfWaterSpriteFrames) * (int)sizeOfWaterFrame.Y, (int)sizeOfWaterFrame.X, (int)sizeOfWaterFrame.Y);
//The wrong code

现在好了。

【讨论】:

    【解决方案2】:

    如果没有看到动画精灵的代码,我真的帮不上什么忙,但是每次在动画中的同一点闪烁都会向我暗示一个无用的帧。可能发生的事情是你在最后画了一个空白框。造成这种情况的一个可能原因是一个直接的错误。如果您使用循环来迭代动画的帧,那么您的索引可能会超出一个(例如,使用>= 而不是>),这意味着您正在绘制一个不应该的额外帧不要在里面。您得到的是空白帧而不是崩溃这一事实表明,额外的帧落在 spritesheet 中,这取决于您的动画算法的结构或运气。

    不过,我需要查看动画代码以确定发生了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      相关资源
      最近更新 更多