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ヒットでしか機能しません。
私はスプライトシートの間違った部分から読んでいましたが、修正されましたが、このコード行からクラッシュしました。player.texture.GetData(0、src、personTextureData、0,87 * 100)。 Microsoft.Xna.Framework.Graphics.dllで 'System.ArgumentException'型の未処理の例外が発生しました 追加情報:このリソースには長方形が大きすぎるか小さすぎます。 –
frameSize * currentFrameを使用していて、texture.Widthよりも大きかったので、frameSize * currentFrameが500で、画像の幅が512で、500から読み込もうとすると問題が発生しました。幅が100インチを追加して、それ以上の600を得ました。 –