2012-04-17 12 views
0

XNAでスプライトシートアニメーションを使用していますが、ピクセル完全衝突を使用します。私の問題は、ピクセル完全な衝突は、スプライトシート上の現在のピクセルが私が使用しているスプライトシートの部分をチェックするのではなく透明であるかどうかをチェックすることです。これは私のコードです:スプライトシートアニメーションのピクセル完全衝突、XNA

blockTextureData = new Color[shot.texture.Width * shot.texture.Height]; 
shot.texture.GetData(blockTextureData); 

personTextureData = new Color[player2.texture.Width * player2.texture.Height]; 

player2.texture.GetData(personTextureData); 

if (IntersectPixels(player2.CollissionBox, personTextureData, shot.CollissionBox, blockTextureData)) 

スプライトシートの特定の部分を選択して衝突をチェックする方法を知りたいと思います。私はthis MSDN guideを使用しました。

EDIT: 私は

src = new Rectangle(frame, 0, 87, 100); 

player.texture.GetData<Color>(0, src, personTextureData,0, 87*100); 

とフレームの代わりにこれを使用し、それを把握するために管理は私が2でspritesheetを使用しているためだったあなたは、第一および第二のために87用など0を、それを起動しています写真は幅が2*87、高さが100です。

Edit2: 問題が発生すると、pixelperfectが機能しなくなるので、1ヒットでしか機能しません。

答えて

0

あなたが言うときに何を意味するのかを詳しく説明できるのであれば、それは一度しか役立たないと助かります。

同じIntersectsPixels関数を私のプロジェクトで使うにはちょっと微調整しなければなりませんでした。私が参考にしたことは、純粋な赤で満たされた正方形(100x100)の非常に遅いアニメーションを使用していて、他のフレームで完全に透明であることでした。

これは、衝突やアニメーション化されたスプライトでのピクセル比較に関連するデバッグの問題を助けました。

正常に動作していないものと動作していないものについて詳細を提供できるかどうかを確認してください。あなたの問題を解決する運が最高です。

+0

私はスプライトシートの間違った部分から読んでいましたが、修正されましたが、このコード行からクラッシュしました。player.texture.GetData (0、src、personTextureData、0,87 * 100)。 Microsoft.Xna.Framework.Graphics.dllで 'System.ArgumentException'型の未処理の例外が発生しました 追加情報:このリソースには長方形が大きすぎるか小さすぎます。 –

+0

frameSize * currentFrameを使用していて、texture.Widthよりも大きかったので、frameSize * currentFrameが500で、画像の幅が512で、500から読み込もうとすると問題が発生しました。幅が100インチを追加して、それ以上の600を得ました。 –