[英]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.