重用和汇集图形
如果要在单个帧上创建数十万个这样的对象,则在运行时创建和配置 Sprite
和 TextField
对象可能会很昂贵。因此,一个常见的技巧是汇集这些对象以供以后重用。请记住,我们不仅要尝试优化创建时间(new Sprite()
),还要尝试优化配置(设置默认属性)。
让我们说我们正在使用数百个 TextField 对象构建一个列表组件。需要创建新对象时,请检查是否可以重用现有对象。
var pool:Array = [];
if (pool.length > 0){
// reuse an existing TextField
var label = pool.pop();
}else{
// create a new TextField
label = new TextField();
// initialize your TextField over here
label.setDefaultTextFormat(...);
label.multiline = false;
label.selectable = false;
}
// add the TextField into the holder so it appears on-screen
// you will need to layout it and set its "text" and other stuff seperately
holder.addChild(label);
稍后,当你销毁组件(或从屏幕中删除它)时,请记住将未使用的标签添加回池中。
foreach (var label in allLabels){
label.parent.removeChild(label); // remove from parent Sprite
pool.push(label); // add to pool
}
在大多数情况下,最好为每次使用而不是全局池创建池。创建全局池的缺点是你需要每次重新初始化对象以从池中检索它,以取消其他功能所做的设置。这同样代价高昂,并且几乎否定了首先使用池的性能提升。