2014-02-19 50 views
0

這是我在網上找到並使用的一個示例(我是對象池的新手)。它適用於單個對象類型但不允許我創建不同對象池如何爲多個對象使用一個對象池

程序包 import starling.display.DisplayObject;

public class SpritePool 
{ 
    private var pool:Array; 
    private var counter:int; 

    public function SpritePool(type:Class, len:int) 
    { 
     pool = new Array(); 
     counter = len; 

     var i:int = len; 
     while(--i > -1) 
      pool[i] = new type(); 
    } 

    public function getSprite():DisplayObject 
    { 
     if(counter > 0) 
      return pool[--counter]; 
     else 
      throw new Error("You exhausted the pool!"); 
    } 

    public function returnSprite(s:DisplayObject):void 
    { 
     pool[counter++] = s; 
    } 
} 

}

回答

1

這裏是對象池的沒有對象計數限制的例子。

import flash.utils.Dictionary; 
import flash.utils.getDefinitionByName; 
import flash.utils.getQualifiedClassName; 

public class ObjectPool { 

    public function ObjectPool() 
    { 
     throw new Error("don't create instance"); 
    } 

    private static const objectDict:Dictionary = new Dictionary(); 

    public static function getObject(c:Class):Object{ 

     //if you want add a object count limit,try to check the count here 
     if (objectDict[c] == null) { 
      objectDict[c] = []; 
     } 

     var t:Array = objectDict[c] as Array; 

     if (t.length > 0) { 
      return t.shift(); 
     } else { 
      return new c(); 
     } 
    } 

    public static function putObject(obj:Object):void { 

     var c:Class = Class(getDefinitionByName(getQualifiedClassName(obj))); 

     if (objectDict[c] == null) { 
      return; 
     } 

     var t:Array = objectDict[c] as Array; 

     if (t && t.indexOf(obj) == -1) { 
      t.push(obj); 
     } 
    } 

} 
+0

感謝您的幫助。非常感激。 – rtpenick

相關問題