0

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))

スプライト シートの特定の部分を選択し、それに対する衝突をチェックする方法を知りたいです。この MSDN ガイドを使用しました。

編集:私はそれを理解することができました、代わりにこれを使用しました

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

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

フレームは、幅と高さの2つの写真を含むスプライトシートを使用するため0、最初と2番目など、開始した場合です。872*87100

Edit2: 問題は、一度ピクセルパーフェクトをヒットすると機能しなくなるため、1 ヒットでしか機能しないことです。

4

1 に答える 1

0

一度しか機能しないと言うときの意味を詳しく説明できれば、それが役に立ちます。

私のプロジェクトで作業するには、同じ IntersectsPixels 関数をかなり微調整する必要がありました。私が役に立ったことの1つは、純粋な赤で塗りつぶされた正方形(100x100など)の非常に遅いアニメーションを使用し、他のフレームだけで完全に透明にすることでした。

これは、衝突とアニメーション化されたスプライトのピクセル比較に関連する問題のデバッグに大いに役立ちました。

何が機能していないのか、どのように機能していないのかについて、より多くの情報を提供できるかどうかを確認してください。あなたの問題を解決してください。

于 2012-04-20T04:25:34.920 に答える