2013-03-22 1 views
0

저는 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 

문제는 작품을 almowst 것입니다 만, 애니메이션의 끝 부분은 한 번 깜박이고 애니메이션을 계속합니다. 뭐가 될수 있었는지?

+0

이 스프라이트의 애니메이션과 같은 사운드에는 1 개의 프레임이 너무 많습니다. 우리는 좀 더 많은 코드가 필요할 것입니다. –

답변

0

스프라이트에 애니메이션을 적용하는 코드를 보지 않고는별로 도움이되지 않지만 매번 같은 지점에서 깜박임을하면 나에게 불쾌감을줍니다. 아마 무슨 일이 벌어지고있는거야? 결국 빈 프레임을 그리는거야. 이것의 가능한 원인은 직관적 인 off-by-one 오류입니다. 루프를 사용하여 애니메이션 프레임을 반복하는 경우 인덱스가 하나 밖에있을 수 있습니다 (예 : > 대신 >= 사용). 즉, 거기에 없어야하는 추가 프레임을 그리는 것입니다. . 충돌 대신에 빈 프레임을 얻는다는 사실은 여분의 프레임이 애니메이션 알고리즘의 구조 나 운에 따라 스프라이트 시트에 포함된다는 것을 나타냅니다.

나는 무슨 일이 일어나고 있는지 확실히 알기 위해서는 애니메이션 코드가 필요합니다.

0

좋아, 나는 틀린 것을 알아 냈다.

문제는 프레임을 변경하는 데 잘못된 계측이 있었으며 때로는 빈 프레임으로 건너 뛰는 것이 었습니다. 코드를 살펴 : 나는 제 1 및 제 2 사각형 생성자 매개 변수 numerOfWaterSpriteFrames하여 currentFrame을 moduling되지

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 

. 다음과 같이하면됩니다.

이제 괜찮습니다.

관련 문제