繁体   English   中英

XNA spriteBatch.Draw-闪烁的精灵

[英]XNA spriteBatch.Draw - flickering sprites

我正在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

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

好的,我找出了问题所在。

问题是,我用错误的算法来更改框架,有时它会跳到空白框架。 看一下代码:

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

没关系

在没有看到动画精灵的代码的情况下,我真的帮不上什么忙,但是每次在动画的同一点眨一下,对我来说都是一个愚蠢的画面。 可能正在发生的是,您最后绘制了一个空白帧。 造成这种情况的可能原因是直接的一对一错误。 如果您使用循环遍历动画的帧,则索引可能会加一(例如,使用>=而不是> ),这意味着您要绘制一个不应包含在其中的额外帧那里。 您得到的是空白帧而不是崩溃的事实表明,无论是通过动画算法的结构还是通过运气,多余的帧都在Spritesheet中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM