这可能是一个noob问题,但我只是没有得到它。
我正在尝试在游戏中实现A *寻路。我正在关注this tutorial和AstarPathfinder.java
中的代码。但是,不是实例化AStarPathfinder类并为所有Nodes
创建一个2D数组,而是使用静态方法,我通过我的2D数组(Level / World),开始和结束节点。
因此我总是要将当前和下一个Node
存储在Node next
和Node current
中。然后我将它们添加到打开或关闭列表(取决于它们所属的位置)并使用其setter方法更改Node
的x和y值(位置),以获得下一个节点。
经过几分钟的调试后,我注意到这个(ofc)也改变了openList
和closedList
内部节点的值。为了防止这种情况,我可以简单地调用next = new Node(int x, int y)
而不是仅设置值,但是当我的Pathfinding运行每一个渲染循环时,它会搞乱垃圾收集并耗费大量性能。所以我正在寻找一个Node
变量的可能性,我可以使用默认构造函数实例化一次,然后更改其值而不更改列表中的值。
这有可能吗?
答案 0 :(得分:1)
您正在寻找的是不可能的。您只有一个Node对象的实例,并在多个位置指向该对象。您需要创建新的Node实例。
它会搞乱垃圾收集并耗费大量性能
如果您尚未进行性能测试并证明这是一个不可接受的瓶颈,那么您不应该这样做。
答案 1 :(得分:1)
虽然这不是您问题的直接答案,但希望它能帮助您做出正确的决定
JVM非常善于重用对象,您通常不应该害怕使用 new 关键字。
有关详细阅读,请参阅should-we-avoid-object-creation-in-java