0

AS3 で、.fla のムービークリップにアタッチされたドキュメント クラスとカスタム クラスを使用したゲームがあります。そのオブジェクトのインスタンスは、1 秒間に複数回作成されます。たとえば、インスタンスが 100 個ある場合、それらのインスタンスを削除したいと考えています。(しばらくするとパフォーマンスの問題が発生するため) インスタンスは、作成後に配列に格納されます。

4

3 に答える 3

0

を使用してそれらを削除できthis.removeChild(obj);ます。objは配列からのオブジェクトです。したがって、必要なのは、配列をループして削除することです。

于 2012-05-28T19:59:11.753 に答える
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
  }
}

ヒント: ネガティブ ループ (i--) は、ポジティブ ループ (i++) よりもパフォーマンスが高速です。
ヒント: 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
    }
}
于 2012-05-28T20:18:15.533 に答える
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();
于 2014-12-29T15:27:00.110 に答える