重用和彙集圖形
如果要在單個幀上建立數十萬個這樣的物件,則在執行時建立和配置 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
}
在大多數情況下,最好為每次使用而不是全域性池建立池。建立全域性池的缺點是你需要每次重新初始化物件以從池中檢索它,以取消其他功能所做的設定。這同樣代價高昂,並且幾乎否定了首先使用池的效能提升。