我一直在为我的一个项目开发一个基本的tile引擎,并设法使它达到一个相当实用的状态。然而,一个主要问题是当我运行代码时,tile总是开始绘制(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)...)来抵消它也不起作用。我真的很难过。
答案 0 :(得分: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
}