0

私は自分のプロジェクトの基本的なタイル エンジンに取り組んでおり、かなり機能する状態にすることができました。ただし、主な問題の 1 つは、コードを実行すると、タイルが常に (0, 0) ではなく (16, 0) で描画を開始することです。

        int row = 0, column = 0;
        for (int x = 1; x < array.Length; x++) {
            if (x % 32 == 0 && x != 0)
                row++;
            if (column >= 31)
                column = 0;
            else
                column++;

            Tile newTile = new Tile();
            newTile.tileSheet = tileSheet;
            newTile.tilePos = new Vector2(column * 16, row * 16);

            if (array[x] == Color.Black) {
                newTile.tileType = 0;
                newTile.tileSource = new Rectangle(0, 0, 16, 16);
            }
            else {
                newTile.tileType = 1;
                newTile.tileSource = new Rectangle(16, 0, 16, 16);
            }

            tileList.Add(newTile);
        }

そして問題の写真:

ここに画像の説明を入力

for() ループで x = 1 から開始することはわかっていますが、これを if ((x - 1) ...) で打ち消しても機能しません。私は本当に困惑しています。

4

1 に答える 1

3

それはあなたが言うからです

if (column >= 31)
    column = 0;
else
    column++;

このため、最初の列は 1 です。

なぜこのようにループするのだろうか。あなたが学んだように、読むのは本当に難しく、デバッグするのはさらに難しいです。ネストされた for ループを使用しないのはなぜですか?

for(int row = 0; row < height; ++row)
    for(int column = 0; column < width; ++column)
    {
        //add the tiles
    }
于 2012-10-21T19:32:32.243 に答える