(我正在使用HaxeFlixel的dev分支)

要创建一个新的FlxPoint变量,我可以做以下三件事之一...

var pt:FlxPoint = new FlxPoint();
var pt:FlxPoint = FlxPoint.weak();
var pt:FlxPoint = FlxPoint.get();

通过阅读方法注释,我发现正在进行某种合并以加速创建FlxPoint。在什么情况下应该使用三种方式中的每一种来创建新的FlxPoint

我有几个函数可以接受FlxPoint作为参数,或者返回它们。我应该复制FlxPoint本身的功能,并使用.weak()创建它们,并使用.putWeak()回收传递给函数的点吗?

在我看来,.get()是用于长期变量(玩家起始位置,存储在数组中的用于路径查找的点等),而.weak()是用于临时变量(在函数内计算的中间值)。这是正确的吗?

最佳答案

FlxPoint提供了一种池化机制,该机制应有助于减少垃圾收集。
FlxPoint.get()尝试从池中检索未使用的点。如果没有,则实际上与new FlxPoint()相同。可以通过将put()返回池中的任何一种来进行回收。
weak()与其说是长寿,不如说是用于库调用的(尽管这通常意味着它是短暂的)-以下是其文档:



这意味着在此示例中,您无需担心保留对枢轴点的引用并对其进行回收,因为rotate()会为您对其调用putWeak():

point.rotate(FlxPoint.weak(0, 0), 45);

10-04 13:21