(我正在使用 HaxeFlixel 的 dev 分支)
要创建一个新FlxPoint变量,我可以做三件事之一......
var pt:FlxPoint = new FlxPoint();
var pt:FlxPoint = FlxPoint.weak();
var pt:FlxPoint = FlxPoint.get();
Run Code Online (Sandbox Code Playgroud)
通过阅读方法注释,我发现某种池化可能会加速创建FlxPoints。在什么情况下我应该使用这三种方式中的每一种来创建一个新的FlxPoint?
我有几个函数要么接受FlxPoints 作为参数,要么返回它们。我应该复制FlxPoint它本身的作用,并.weak()用来创建它们,并.putWeak()回收传递给函数的点吗?
对我来说,它似乎.get()适用于长期变量(玩家开始位置、存储在数组中用于路径查找的点等),并且.weak()适用于临时变量(在函数中计算的中间值)。这是正确的吗?
FlxPoint 提供了一个池机制,应该有助于减少垃圾收集。
FlxPoint.get()尝试从池中检索未使用的点。如果没有,它实际上与new FlxPoint(). 任何一个都可以通过put()回到池中来回收。
weak() 更多的是用于库调用而不是长寿(尽管这通常意味着它是短暂的) - 这是它的文档:
回收或创建一个新的 FlxPoint,当传入 flixel 函数时,它将自动释放到池中。
这意味着您无需担心保留对枢轴点的引用并在此示例中回收它,因为它会为您rotate()调用putWeak():
point.rotate(FlxPoint.weak(0, 0), 45);
Run Code Online (Sandbox Code Playgroud)