Это, вероятно, вопрос о нобе, но я просто не понимаю.
Я пытаюсь реализовать A * pathfinding в своей игре. Я следовал этому руководству и коду в AstarPathfinder.java
. Но вместо того, чтобы создавать экземпляр класса AStarPathfinder и иметь 2D-массив для всех Nodes
я сделал статический метод, которому я передаю свой 2D-массив (уровень/мир), начало и конец узла. Причиной этого я всегда должен хранить текущий и следующий Node
в Node next
и Node current
. Затем я добавляю их в открытый или закрытый список (в зависимости от того, где они принадлежат) и изменяют значение x и y (положение) Node
с помощью метода их установки, чтобы иметь следующий узел.
После нескольких минут отладки я заметил, что этот (ofc) изменяет также значение узла внутри openList
и closedList
. Чтобы предотвратить это, я могу просто вызвать next = new Node(int x, int y)
вместо того, чтобы устанавливать только значения, но поскольку мой Pathfinding работает каждые несколько циклов рендеринга, он испортил сборку мусора и стоил бы большой производительности. Поэтому я ищу возможность иметь одну переменную Node
, которую я могу создать экземпляр с конструктором по умолчанию, а затем изменить его значение, не изменяя его значение в списке.
Это возможно как-то?
Хотя это не прямой ответ на ваш вопрос, надеюсь, это поможет вам принять правильное решение
JVM очень хорошо подходит для повторного использования объектов, и вы, как правило, не боитесь использовать новое ключевое слово.
Более подробное чтение см. В статье " Мы должны избегать создания объекта в Java"
То, что вы ищете, невозможно. У вас есть только один экземпляр объекта Node, с указателями на этот объект в нескольких местах. Вам нужно создать новые экземпляры Node.
это испортило бы сбор мусора и стоило бы большой производительности
Если вы не проводили тестирование производительности и показали, что это недопустимое узкое место, вы не должны этого допускать.
new
объектов. Так что я подумал, что это будет очень тяжело. Спасибо за Ваш ответ!