2012-05-28 149 views
0

我有一個遊戲,在AS3中有一個文檔類和一個自定義類,它附加到我的.fla中的動畫片段。該對象的實例多次/秒。我想要刪除這些實例,比方說,它們有100個。 (因爲一段時間後性能問題)實例在創建後存儲在一個Array中。AS3刪除對象的所有實例?

+0

那麼,有什麼問題,你有一個數組來所有的人一個參考,你有一些容器(假設他們是某種精靈/影片剪輯/的DisplayObject/UIComponents的)數組的時候。長度大於100開始從列表開始處取消移動項目並從容器中移除它們,則可以重新使用/回收這些實例或讓它們被垃圾收集(重新使用更好記住,減少,重用, 回收)。 myArray.unshift()從列表中抽取第一個項目(表現得像一個隊列,FIFO先進先出) – shaunhusain

回答

0

您可以使用this.removeChild(obj);刪除它們,obj是您的數組中的對象。所以你需要循環訪問數組並將其刪除。

0

,將刪除所有的對象時,對象是超過100

if(array.length > 100) 
{ 
    for(var i:int = array.length - 1; i > -1; i--) 
    { 
    stage.removeChild(array[i]);// or any other parent containing instances 
    array.pop(); 
    //array[i] = null; // if you want to make them null instead of deleting from array 
    } 
} 

提示:負迴路(我 - )是更快的在性能上比正循環(我+ +)。
提示:pop()比unshift()更快。

更新

,將刪除,只有當他們超過100個對象,導致只有100最後的對象仍然在舞臺上。

if(array.length > 100) 
{ 
    for(var i:int = array.length - 1; i > -1; i--) 
    { 
    if(array.length > 100) 
    { 
     stage.removeChild(array[i]);// or any other parent containing instances 
     array.unshift();// if you want to delete oldest objects, you must use unshift(), instead of pop(), which deletes newer objects 
     //array[i] = null; // if you want to make them null instead of deleting from array 
    } 
} 
+0

這是比不變更更好的性能嗎?我也會假設你不想真的清空整個集合,而是刪除最舊的引用。 – shaunhusain

0
/****** MyClass.as *********/ 

public class MyClass extends Sprite{ 

    private var myVar:int=8567; 

    private function myClass():void{ 
     //blablabla 
    } 

    public class destroy():void{ 
     myVar = null; 
    this.removeFromParent(true); //method of Starling framework 
    } 
} 


/******** Main.as ****************/ 

public var myInstance:MyClass = new Myclass(); 

//Oh!! i need remove this instance D: 

myInstance.destroy(); 
相關問題