Оптимальный ссылочный 2d массив? - PullRequest
2 голосов
/ 20 мая 2011

Итак, я создаю довольно простую 2d игру, где пользователи могут «рисовать» карту.(На самом деле, они не рисуют его, вручную вводят список х / у, но аспект дизайна не важен сейчас.)

Когда добавляется новая плитка, эта плитка входит в массив всех плитокв игре.

Центр составляет 0,0.Плитки могут быть добавлены во всех направлениях, поэтому могут быть в 1,1, 100, 100 или -50, -50.

Иногда я хочу определить, какая плитка находится в определенном месте.Один (imho плохой) способ сделать это состоит в том, чтобы получить x / y и перебрать все плитки и проверить, находятся ли они в этом месте.

То, как я сейчас это делаю, - это иметь отдельный 2dмассив нулевых элементов, и когда плитка добавляется, она устанавливается в этом массиве.(т. е. tilemap [10] [10] = tile [100]) Конечно, поскольку значения могут быть отрицательными, tilemap [0] [0] на самом деле является плиткой -1000 / -1000.(выбран в качестве произвольного предела)

Есть ли лучший способ сделать это?Я чувствую, что использование огромного массива в основном пустых объектов может быть более оптимальным.

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 20 мая 2011

Одним из возможных решений было бы сохранение Object или Dictionary, где ключом является местоположение x / y.

Таким образом, если вы добавляете плитку в 10,20, вы можете сохранить ее в объекте как:

this.m_objs[tileX + "_" + tileY] = new Tile;

Итак, если вы хотите проверить, находится ли что-то в позиции 10,20, вы можете использовать что-то вроде:

public function checkIfExists( x:int, y:int ):void
{
    return ( this.m_objs[x + "_" + y] != undefined );
}
2 голосов
/ 20 мая 2011

Я рекомендую использовать Dictionary, поскольку поиск в нем гораздо быстрее, чем поиск в массиве.Судя по возможным координатам -1000 / -1000, это было бы большим преимуществом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...