Вопрос

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

Это было полезно?

Решение

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

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

ХОРОШО. Начните с двухмерного массива (массив, а не ArrayList) байта. Что позволяет вам 256 видов блока и позволяет вашим игрокам копать без постоянного распределения памяти с помощью вашей new AirBlock(0, 0) безумие. Чтобы нарисовать мир, итерация над видимыми координатами и карты байтов до растрового карты или подобного.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top