Добавление новых значений в массив в разное время

Я работаю над игрой и использую массив чанков для хранения загруженных чанков. В настоящее время я работаю над генерацией ландшафта, когда игрок появляется. Есть ли возможность создать новый фрагмент в массиве фрагментов всякий раз, когда я считаю это подходящим. Короче говоря, когда игрок идет в регион, где фрагмент не сгенерирован, я хочу инициализировать новое значение в массиве фрагментов БЕЗ необходимости инициализировать этот фрагмент в начале класса.

chunks = new Chunk[chunkCounter];
chunks[chunkCounter] = new Chunk();
chunkCounter++;

Каждый раз, когда нужно сгенерировать новый фрагмент, мне нужно сделать что-то вроде этого, когда я создаю новый фрагмент в массиве без указания размера массива.

Заранее спасибо.


person Sock314    schedule 12.07.2014    source источник
comment
Если я правильно понимаю ваш вопрос, то ответ - да: вы можете назначить произвольные новые экземпляры объекта переменной в любой позиции в любое время во время выполнения программы.   -  person Kon    schedule 12.07.2014
comment
Конечно. Вы уверены, что вам нужен массив, а не список?   -  person Dave Newton    schedule 12.07.2014
comment
Я думаю, что вы получите лучшую долгосрочную производительность, если будете использовать Связанный список. Причина в том, что вы можете произвольно масштабировать его по своему желанию, но, в отличие от некоторых альтернативных реализаций List, он не требует непрерывной памяти. Хорошее объяснение см. здесь (если вы сделаете это, вам придется пожертвовать чем-то, впрочем, там тоже поясняется).   -  person nerdwaller    schedule 12.07.2014


Ответы (1)


Да, вы можете это сделать! Но перед этим вам нужно определить общий размер вашего массива фрагментов (скажем, 100).

Чанки = новый чанк[100];

Вам не нужно инициализировать его сразу. Когда игрок подходит к этому фрагменту, вы можете его инициализировать.

chunks[chunkCounter] = new Chunk();
chunkCounter++;

но учтите, что вы не можете сделать

chunks = new Chunk[chunkCounter];
chunks[chunkCounter] = new Chunk();
chunkCounter++;

как первый, создаст массив размером chunkCounter, а доступные индексы будут 0-(chunkCounter-1), поэтому ваш chunks[chunkCounter] = new Chunk(); выдаст IndexOutofBoundException.

Также вы не можете динамически изменять размер массива. Если вы хотите использовать вместо этого List.

person Aniket Thakur    schedule 12.07.2014