В Java (Swing), скажем, у меня есть 2D-игра, в которой у меня есть различные типы объектов на экране, такие как игрок, плохие парни, бонусы и т. Д. Когда игрок перемещается по экрану в порядкечтобы сделать эффективную проверку того, что находится в непосредственной близости от игрока, я бы подумал, что мне нужен индексированный доступ к вещам, которые находятся рядом с персонажем, в зависимости от его положения.
Например, если игрок P'наступает на элемент' E 'в следующем примере ...
| | | | | |
| | | |P| |
| | |E| | |
| | | | | |
... будет делать что-то вроде:
if(player.getPosition().x == entity.getPosition().x &&
entity.getPosition.y == thing.getPosition().y)
{
//do something
}
И это нормально, но это подразумевает, чтосущности удерживают свои позиции, и поэтому, если бы у меня было МНОЖЕСТВО сущностей на экране, мне пришлось бы пройтись по всем доступным сущностям и проверить каждую позицию относительно позиции игрока.Это кажется действительно неэффективным, особенно если вы начинаете получать тонны сущностей.
Итак, я подозреваю, что мне понадобится какая-то карта, подобная
Map<Point, Entity> map = new HashMap<Point, Entity>();
, и я сохраню там свою информацию о точке, чтобы я мог получить доступ к этим объектам в постоянном времени.Единственная проблема с этим подходом состоит в том, что, если я хочу переместить сущность в другую точку на экране, мне придется искать в значениях HashMap сущность, которую я хочу переместить (неэффективно, так как я не знаю ееУкажите положение заранее), а затем, как только я его найду, удалите его из HashMap и вставьте заново с новой информацией о положении.
Любые предложения или советы относительно того, какого рода структура / хранилище данныхформат, который я должен использовать здесь, чтобы иметь эффективный доступ к сущностям на основе их позиции, а также позиции на основе сущности?