重用和彙集圖形

如果要在單個幀上建立數十萬個這樣的物件,則在執行時建立和配置 SpriteTextField 物件可能會很昂貴。因此,一個常見的技巧是彙集這些物件以供以後重用。請記住,我們不僅要嘗試優化建立時間(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
}

在大多數情況下,最好為每次使用而不是全域性池建立池。建立全域性池的缺點是你需要每次重新初始化物件以從池中檢索它,以取消其他功能所做的設定。這同樣代價高昂,並且幾乎否定了首先使用池的效能提升。