0

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

問題は、それがほぼ機能することですが、アニメーションの終わり近くで一度点滅してアニメーションを続行することです。どうなり得るか?

4

2 に答える 2

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

最初と 2 番目の 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

今は大丈夫です。

于 2013-03-22T16:05:58.593 に答える
0

スプライトをアニメーション化するコードを見ないと、あまり役に立ちませんが、アニメーションの同じポイントで毎回まばたきをすると、不発なフレームが示唆されます。おそらく何が起こっているかというと、最後に空白のフレームを描いているということです。この原因として考えられるのは、単純な off-by-one エラーです。ループを使用してアニメーションのフレームを反復処理している場合、インデックスが 1 つずれている可能性があります (たとえば、>=代わりに を使用>)。これは、そこにあってはならない余分なフレームを描画していることを意味します。クラッシュではなく空白のフレームを取得しているという事実は、アニメーション アルゴリズムの構造または運によって、余分なフレームがスプライトシート内にあることを示唆しています。

ただし、何が起こっているのかを確認するには、アニメーション コードを確認する必要があります。

于 2013-03-22T14:49:44.700 に答える