2015-04-29 4 views
0

Итак, я пытаюсь нарисовать многослойную карту на основе плитки, как говорится в названии. У меня это до сих пор. Я использую плитки (32, 32). В настоящее время он рисует только один тип плитки, как всю карту плитки. Когда нужно сделать несколько разных типов плиток, чтобы сделать карту.Рисование карты на основе многослойной плитки

for (int layers = 0; layers < map.Layers.Count; layers++) { 
    for (var i = 0; i < map.Layers[layers].Tiles.Count; i++) { 
     int gid = map.Layers[layers].Tiles[i].Gid; 

     if (gid != 0) { 
      int tileFrame = gid - 1; 
      int row = tileFrame/(map.Height/tileHeight); 

      float x = (i % map.Width) * map.TileWidth; 
      float y = (float)Math.Floor(i/(double)map.Width) * map.TileHeight; 

      Rectangle tilesetRec = new Rectangle(0, 0, 32, 32); 

      for (int j = 0; j < tileSets.Count; j++) { 
       for (int k = 0; k < tileSets[j].Tiles.Count; k++) { 
        spriteBatch.Draw(tileSets[j].Tiles[k].Image.Texture, new Rectangle((int)x, (int)y, 32, 32), Color.White); 
       } 
      } 
     } 
    } 
} 

Это не совсем мой код, это чей-что я пытался построить по-видимому, он работал на человек для нанесения одного слоя. Исходный код:

for (var i = 0; i < _map.Layers[0].Tiles.Count; i++) { 
    int gid = _map.Layers[0].Tiles[i].Gid; 

    // Empty tile, do nothing 
    if (gid == 0) { 

    } else { 
     int tileFrame = gid - 1; 
     int row = tileFrame/(_tileset.Height/_tileHeight); 

     float x = (i % _map.Width) * _map.TileWidth; 
     float y = (float)Math.Floor(i/(double)_map.Width) * _map.TileHeight; 

     Rectangle tilesetRec = new Rectangle(_tileWidth * tileFrame, _tileHeight * row, 32, 32); 

     spriteBatch.Draw(_tileset, new Rectangle((int)x, (int)y, 32, 32), tilesetRec, Color.White); 
    } 
} 
+1

'Я не совсем уверен, что я делаю неправильно'. Пожалуйста, просмотрите [ask] и затем [edit] ваш вопрос, чтобы включить * конкретную * проблему. –

+0

Попробуйте отладить? Это будет быстрее, чем задавать вопрос –

ответ

0

Ваша проблема в том, что для каждой позиции плитки вы, кажется, рисуете все плитки во всех наборах плиток. Переменные tileFrame, row и tilesetRec, которые были использованы для визуализации конкретной плитки в исходном коде, не используются в вашем первом фрагменте.