Как исправить этот движок плиток в C#/XNA
Я работал над базовым механизмом плиток для моего проекта и смог довести его до довольно функционального состояния. Однако одна из основных проблем заключается в том, что когда я запускаю код, плитки всегда начинают рисоваться с (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);
}
И картина проблемы:
Я знаю, что начинаю с x = 1 для цикла for (), но даже при противодействии этому с помощью if ((x - 1) ...) он не работает. Я действительно в тупик.
1 ответ
Решение
Это потому что ты говоришь
if (column >= 31)
column = 0;
else
column++;
Из-за этого первый столбец равен 1.
Интересно, почему вы делаете цикл таким образом. Это действительно трудно читать и еще труднее отлаживать, как вы узнали. Почему вы не используете вложенные для циклов?
for(int row = 0; row < height; ++row)
for(int column = 0; column < width; ++column)
{
//add the tiles
}