-1

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 変数を使って多くのことを行っています。そのため、問題は変数の値に起因するのではなく、私が変数を使用して行うことにあると確信しています。助けてください!(:

4

1 に答える 1

1

次のようにループを中断する必要があることがわかりました。

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;
                break;
            }
            else
            {
                c = 1;
            }
        }

        if (c == 1)
        {
            Position.X += Speed;
        }

    }
于 2011-08-07T00:40:02.297 に答える