0

我一直在为我的一个项目开发一个基本的瓦片引擎,并设法使其达到相当实用的状态。然而,一个主要问题是,当我运行代码时,图块将始终在 (16, 0) 而不是 (0, 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 回答