0

私が作成しているゲームには、XML ファイルを使用して作成されたレベルがあります。レベルはネストされた for ループで描画されます。別の入れ子になった for ループを作成して、各タイルの位置を取得し、それをギザギザの配列に割り当てようとしています。これを行いたいので、各タイルの衝突検出を行うことができます。

以下のサンプル レベルの図の各タイルは 20x20 ピクセルで、30x30 タイルで、画面解像度は 600x600 です。レベルはフリー ソフトウェアの Realm Factory で作成されましたが、これにはドキュメントがなく、実際のサポートもありません... しかし、currentLevel.Rows はここでは 30 に等しくなり、currentLevel.Columns についても同じです。

以下は、これまでに作成しようとしたものですが、それほど多くはありません。どんなに頑張っても、私の脳はギザギザの配列を理解することを拒否します。作成方法もわかりません!

int a = 0;
int b = 0;
int x = 0;
int y = 0;
int[,] size = new int[currentLevel.Rows, currentLevel.Columns]'
int[,] pos = new int[600,600];
int[] tiles = new int[600];


for (a = 0; a < 600; a += 20, x++)
{
    for (b = 0; b < 600; b += 20, y++)
    {
        size[x][y] = ;
    }
}

tiles[x,y] に割り当てたいのは各タイルの X と Y の位置なので、各タイルにコリジョンを追加できます。

私を助けてくれる人に感謝します。プログラミングは大好きですが、数学と視空間スキルは苦手です...

ここに画像の説明を入力

4

1 に答える 1

1

位置はポイント (横座標と縦座標があります) であり、整数ではありません。さらに、マトリックス (タイルで 20x20、またはピクセルで 600x600) がある場合、それをギザギザの配列に格納しようとしているのはなぜですか? これが多次元配列の目的です。

        var tileSize = 20;
        var screenSizeInTiles = 30;

        // initializing multidimensional array of points
        var tilePositions = new Point[screenSizeInTiles, screenSizeInTiles];

        for (var x = 0; x < screenSizeInTiles; x++)
        {
            for (var y = 0; y < screenSizeInTiles; y++)
            {
                tilePositions[x, y] = new Point(x * tileSize, y * tileSize);
            }
        }

ギザギザ配列と比較します。

        // initializing jagged array of points
        var tilePositions = new Point[screenSizeInTiles][];
        for (var i = 0; i < screenSizeInTiles; i++)
        {
            // each item in a jagged array is a one-dimensional array of points.
            tilePositions[i] = new Point[screenSizeInTiles];
        }

        for (var x = 0; x < screenSizeInTiles; x++)
        {
            for (var y = 0; y < screenSizeInTiles; y++)
            {
                tilePositions[x][y] = new Point(x * tileSize, y * tileSize);
            }
        }

ご覧のとおり、多次元配列はエンティティであり、すべての行が他の行と同じサイズであることを保証し、列にも同じことが当てはまります。

ジャグ配列は、配列の配列であり、各メンバー (配列) の長さは、その「隣接」の長さとは異なります。

もちろん、行列をジャグ配列として表すこともできますが、これは特殊なケースです (ジャグ配列のすべてのメンバーが同じ長さになります) が、これはあまり便利ではありません。

PS私はここPointから構造を使用しました。

于 2012-12-13T05:34:20.587 に答える