ActionScript 3 重用和合并图形

示例

创建和配置Sprite,并TextField如果你是一个单一的框架上创造数十万个,这些在运行时的对象可以是昂贵的。因此,一个常见的技巧是“汇集”这些对象以供以后重用。请记住,我们不仅在尝试优化创建时间(),而且还在优化配置(设置默认属性)。new Sprite()

可以说我们正在使用数百个TextField对象构建一个列表组件。当您需要创建新对象时,请检查是否可以重用现有对象。

var pool:Array = [];

if (pool.length > 0){

    // 重用现有的TextField
    var label = pool.pop();

}else{
    // 创建一个新的TextField
    label = new TextField();
    
    // 在这里初始化您的TextField
    label.setDefaultTextFormat(...);
   label.multiline= false;
   label.selectable= false;
}

// 将TextField添加到支架中,使其出现在屏幕上
// 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); // 从父级精灵中删除
    pool.push(label); // 添加到游泳池
}

在大多数情况下,最好为每个使用情况创建一个池,而不是全局池。创建全局池的缺点是,您需要每次都重新初始化对象以从池中检索对象,以抵消其他功能所做的设置。这同样昂贵,并且首先否定了使用池的性能提升。