Я разрабатываю двумерную бесконечную прокручивающую игру. Когда игрок движется вправо, я продолжаю добавлять случайный сегмент плитки в мир, чтобы он был бесшовным и «бесконечным». Как показано ниже, случайный сегмент добавляется, когда правая сторона области просмотра достигает синей области.Самый эффективный способ управления частым приданием данных
Как я делаю это в настоящее время работает просто отлично. Проблема в том, что я чувствую, что есть гораздо более эффективный способ сделать это.
Мировые плитки представлены в 2D-массиве, а функция добавления в мир выглядит примерно так.
Array.Resize<Tile[]>(ref world.Tiles, newWidth);
for (int x = 0; x < newSegment.Width; x++)
{
world.Tiles[oldWidth + x] = newSegment.Tiles[x];
}
Я понимаю, что List<T>
идеально подходит для динамической коллекции объектов, но имейте в виду, что там будет потенциально тысячи колонн. Если я предполагаю это правильно, многие элементы списка, особенно вложенные, принесут много накладных расходов. По этой причине я пошел с массивами изначально.
Неужели мой нынешний подход неэффективен? Если да, то как мне удается часто (каждые 10-15 секунд в среднем) добавлять случайный сегмент в мир?
'Queue', вероятно, лучше всего подходит для игры из-за гарантированной лучшей локальности памяти и того факта, что она не генерирует мусор (предоставление' Tile' - это тип значения). –