Minecraft 2d Remake: проблема создания и уничтожения блоков - PullRequest
2 голосов
/ 17 февраля 2012

Я хорошо разбираюсь в создании своего 2-го ремейка майнкрафта в Java.Я знаю, что это можно сделать хорошо, Orange451 на YouTube вдохновил меня, чтобы попытаться сделать это.У меня есть все блоки на карте, загружаемые из текстовых файлов, и когда игра загружается, она добавляет все блоки из текстовых файлов в ArrayList.Я создал алгоритм для расчета индекса блока, на котором находится ваш курсор в игре, и добавил MouseListener, чтобы при щелчке он заменял блок на воздушный блок (в основном уничтожая блок).Чтобы заменить блок в ArrayList, я использовал метод набора ArrayList (index, obj).Теоретически, это должно работать правильно, и это в некотором роде работает.Единственная проблема заключается в том, что он также создает черное пространство на карте в нескольких кварталах.Это крайне неприятно, особенно с тех пор, как я зашел так далеко.ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Мне нужен метод, который заменит объект в ArrayList, или лучший способ сделать это, потому что мой метод обнаружения столкновений также использует ArrayList для определения положения блоков.ПОМОГИТЕ МНЕ, ПОЖАЛУЙСТА!Я не могу публиковать изображения, но он устанавливает блок на текстуру воздуха, но создает черный квадрат (пробел в мэйблере arraylist?) Возле него.Поскольку слишком много кода для публикации, вот исходный код всего проекта: Blockworld 2D Source

1 Ответ

4 голосов
/ 17 февраля 2012

Вы боретесь с этим, потому что ArrayList объектов, которые знают свою координату, является безумным способом представления этой 2d структуры. Это неупорядочено - вы можете изменить или перетасовать свой ArrayList, и он будет рисовать то же самое. Он имеет обновление O (N), так как вы должны искать в ArrayList объект с соответствующей координатой, прежде чем сможете его заменить. Он может иметь более одного объекта с одинаковыми координатами. Это может быть в состоянии, когда видимые координаты вообще не имеют соответствующих объектов - вот что вы здесь встретили.

ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ

OK. Начните с двухмерного массива (массив, а не ArrayList) байта. Который позволяет вам 256 видов блоков, и который позволяет вашим игрокам копать без постоянного выделения памяти с вашим new AirBlock(0, 0) безумием. Чтобы нарисовать мир, перебирайте видимые координаты и отображайте байты в растровое изображение или тому подобное.

Также: 2d Minecraft уже существует. Это называется Террария.

...