xnaとの衝突検出を行おうとしています。次のような2D配列からマップを描画する(一種の)プラットフォーマーマップがあります。
int[,] map = new int[,]
{
{0,0,1,0,0,0,0,0,},
{0,0,1,1,0,0,0,0,},
{0,0,0,1,1,0,0,0,},
{0,0,0,0,1,0,0,0,},
{0,0,0,1,1,0,0,0,},
{0,0,1,1,0,0,0,0,},
{0,0,1,0,0,0,0,0,},
{0,0,1,1,1,1,1,1,},
};
http://xnatd.blogspot.com/2009/02/ok-so-first-part-of-our-tower-defence.htmlから取得したので、実際のものではありませんが、類似しています。また、バウンディングボックスが問題なくある横スクロールのようなメインキャラクターのクラスもあります。
ただし、タイルセットのバウンディングボックスを取得して、mario.boundingboxがそれらと交差するかどうかを確認するにはどうすればよいですか?
交差点に使用できることは知っていますboundingbox.intersects(boundingbox2)
が、多くのバウンディングボックスがあり(おそらくそれらの2次元配列ですか?これは可能ですか?)、何度か試しましたが、めちゃくちゃになりました。
私が描くために使用するコードは、リンクにあるコードと非常によく似ています。x、yとサイズの両方を知っているので、バウンディングボックス配列を作成し、それらのバウンディングボックスを設定しようとしましたが、ランダムな場所にバウンディングボックスを作成することになりました。
このコード内にバウンディングボックスを作成して後で使用するにはどうすればよいかを知る必要があると思います(xとyごとにループして何かが触れるかどうかを確認しますか?):
for (int x = 0; x < Width; x++)
{
for (int y = 0; y < Height; y++)
{
int textureIndex = map[y, x];
if (textureIndex == -1)
continue;
Texture2D texture = tileTextures[textureIndex];
batch.Draw(texture, new Rectangle(
x * 32, y * 32, 32, 32), Color.White);
}
}
これを行う別の方法があるかどうか、または私の考えが間違っているかどうかを知ってうれしいです。