2015-08-22 3 views
0

Это рассмотренный метод:Метод, предназначенный для измельчения плитки в массив, терпит неудачу, когда ему дается более одной строки?

Color[][] ChopUpTiles() 
{ 
    int numTilesPerRow = terrainTiles.width/tileResolution; 
    int numRows = terrainTiles.height/tileResolution; 

    Color[][] tiles = new Color[numTilesPerRow * numRows][]; 

    for (int y = 0; y < numRows; y++) 
    { 
     for (int x = 0; x < numTilesPerRow; x++) 
     { 
      tiles[y * numTilesPerRow + x] = terrainTiles.GetPixels(x * tileResolution , y * tileResolution, tileResolution, tileResolution); 

     } 
    } 

    return tiles; 
} 

Это довольно основная функция, и работает - до тех пор, как Tileset в вопросе имеет только одну строку. Если он имеет более чем одну строку, это волнует. Внезапно использование «Плитки [1]» больше не возвращает плитки 1. Вместо этого она возвращает ... плитка 15. Я понятия не имею, почему она действует таким образом или где математика ошибочна. Может ли кто-нибудь понять, что происходит?

+0

При использовании функции используется несколько, как это - что я хотел добавить, но забыл раньше: цвет [] [] tiles = ChopUpTiles(); - Цвет [] p = плитки [0]; – Merlin

ответ

1

Вы хотите сказать tiles[y][numTilesPerRow + x] или tiles[y][x] или что-то в этом роде? потому что я не знаю, что вы пытаетесь сделать, но вы извлекаете целую строку, а не плиту.

также, я думаю, Color[][] tiles = new Color[numTilesPerRow * numRows][]; должно быть Color[][] tiles = new Color[numRows][numTilesPerRow]; или я не прав?

В принципе, у вас есть многомерная Array пока вы лечите его как одномерный Array

+0

Исходная функция не моя, поэтому я хотел бы получить несколько советов о том, как исправить это правильно. Я тоже замечал это и задавался вопросом, является ли это частью проблемы. – Merlin

+0

Я действительно не понимаю точно, чего он пытается достичь, чтобы быть честным, но я лично не использую 2 мерных 'Array' ы предпочитают помещать все в единый массив таким образом, что запросы могут быть достигнуты с помощью одного цикла и я не должен иметь вложенные циклы. Для 1-мерного массива все, что вам нужно сделать, это петля над всеми объектами и использовать такую ​​операцию модуля: 'column = i% width' и' row = i% height' – maksymiuk

 Смежные вопросы

  • Нет связанных вопросов^_^