3 日間検索しましたが、解決策が見つかりませんでした。コードは次のとおりです。
if (keyboardState.IsKeyDown(Keys.Right))
{
for (int i = GlobalClass.BlocksPositions.Count - 1; i > 0; i--)
{
if (new Rectangle((int)GlobalClass.BlocksPositions[i].X, (int)GlobalClass.BlocksPositions[i].Y, bT.Width, bT.Height).Intersects(new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height)))
{
c = 0;
}
else
{
c = 1;
}
}
if (c == 1)
{
Position.X += Speed;
}
}
各ブロックの位置は、画面をクリックして作成できるブロックに等しく、新しいブロックの位置がリストに追加されます。基本的に、BlockPosition リストにブロック座標のリストがあります。次に、各 blockposition の条件、各 BlockPosition の条件作成、および Player の条件を渡します...衝突がある場合、プレーヤーはその方向に移動しません。コードを試すと、私のキャラクターはリストの最初の要素のみと衝突し、他の要素とは衝突しません。最初の要素を削除すると、次の要素と衝突しますが、他の要素とは衝突しません。すべての変数はFINEです。このコードを次のようなものに置き換えようとしたので、私はそれを知っています:
if (keyboardState.IsKeyDown(Keys.Right))
{
for (int i = GlobalClass.BlocksPositions.Count - 1; i > 0; i--)
{
if (new Rectangle((int)GlobalClass.BlocksPositions[i].X, (int)GlobalClass.BlocksPositions[i].Y, bT.Width, bT.Height).Intersects(new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height)))
{
GlobalClass.BlocksPositions.RemoveAt[i];
}
}
}
同じことですが、ここで衝突した場合、リストの要素を削除します。同じ条件ですが、試してみると、すべての要素が検出され、触れた要素が削除されます。foreach 関数を試してみましたが、同じ結果が得られました。どうしたの?私はすでに dos 変数を使って多くのことを行っています。そのため、問題は変数の値に起因するのではなく、私が変数を使用して行うことにあると確信しています。助けてください!(: