XNA spriteBatch.Draw - трептящи спрайтове

Пиша спрайт анимация в 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

Проблемът е, че почти работи, но към края на анимацията мига веднъж и продължава анимацията. Какво би могло да бъде?


person Michał Bożydar Pawłowski    schedule 22.03.2013    source източник
comment
Звучи сякаш вашата анимация за този спрайт има 1 твърде много кадри. Ще ни трябва още малко код, за да сме сигурни.   -  person Mohammed Hossain    schedule 22.03.2013


Отговори (2)


Добре, разбрах какво не е наред.

Проблемът беше, че имах грешен алгоритъм за смяна на кадри и понякога прескачаше до празен кадър. Вижте кода:

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

Не модулирах currentFrame от numerOfWaterSpriteFrames в първия и втория параметър на конструктора на Rectangle. Просто така:

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

Сега е добре.

person Michał Bożydar Pawłowski    schedule 22.03.2013

Не мога да помогна много, без да видя кода, който анимира спрайта, но мигането в една и съща точка от анимацията всеки път ми подсказва, че рамката е тъпа. Това, което вероятно се случва, е, че рисувате празна рамка в края. Вероятна причина за това е обикновена грешка "изключване по едно"; ако използвате цикъл, за да итерирате кадрите на вашата анимация, тогава вашият индекс може да е извън един (използвайки >= вместо >, например), което означава, че рисувате допълнителен кадър, който не трябва да бъде там . Фактът, че получавате празен кадър вместо срив, предполага, че допълнителният кадър попада в спрайта, или поради структурата на алгоритъма ви за анимация, или поради късмет.

Все пак трябва да видя кода на анимацията, за да съм сигурен какво се случва.

person anaximander    schedule 22.03.2013