0

まず、簡単に説明します。

2つの配列があります。最初の配列:ホルダー、2番目の配列:クリップです。最初の配列は、各アイテムを配列にプッシュし、ステージに追加するループを介したグリッドパターンとしての動的な空のボックスでした//場所x、yのみ

2番目の配列:クリップは動的にロードされたSWFムービー、10個すべて一緒にこれらのロードされたSWFクリップはHolder配列に「addChild」されるため、これらのクリップはグリッドパターンになり、同時に配列クリップにプッシュされます。

     Clips[1].x = 50 ; // this works fine 

だから私は私のクリップがそこにあることを知っています、正しく参照してください。しかし、icantが行っているように見えるのは、array:Clipsからすべてのコンテンツを削除することです。

      var len:int = Clips.length;
      for( var i:int = 0; i < len; i++ ) {
      this.removeChild( Clips[i] ) ;        
      }

スプライスも試しましたが、同じ結果でエラーがスローされるか、何も実行されません。いずれにしても、アイテムが削除されないか、ステージから削除されません。

説明する簡単な方法私は配列に15個のアイテムをロードします。ボタンを押すたびに、その配列をクリアして、さらに15個のアイテムを再入力します。これは、これまで10秒ごとに発生します。

私は問題なく再入力できますが、古いコンテンツにさらに多くのものをロードし続けますが、古いコンテンツをクリアしたいです

4

2 に答える 2

2

エラーを防ぐために、条件を修正してください。

if(this.contains(Clips[i]){
    this.removeChild(Clips[i]);
}

それでも機能しない場合は、間違ったクリップから削除している可能性があります。つまり、「これ」ではありません。これを試してください。

if(Clips[i] != null && Clips[i].parent != null){
        Clips[i].parent.removeChild(Clips[i]);
    }

Clips[i] != null以下のコメントでエラーが発生するかどうかを確認するために条件の一部が追加されました)

これにより、クリップに親が指定されているかどうかがチェックされ(親が指定されている場合は、別のクリップ内にあります)、「this」だけでなく、そのクリップから具体的に削除されます。

..そして、配列ではなくベクトルを使用することもお勧めします-配列には任意の種類の値を入れることができるので、そこに非DisplayObjectを入れると、削除しようとするとエラーが発生します。ステージから:

var clips:Vector.<DisplayObject> = new Vector.<DisplayObject>();

それよりも:

var clips:Array = [];

上記のかさばる宣言を除けば、これはほとんどの点で配列とまったく同じように機能します(push、splice、角括弧表記の参照要素clips[0]などの機能)が、特定の種類のオブジェクト/変数のみをその中に入れることができます。この場合、DisplayObject。そこに「int」を入れようとしても、それはできません-それはまた、はるかに速く実行されます!いずれにせよ使用する価値がありますが、ここでは、気付かずにその配列に何か他のものを入れた場合に役立つ可能性があります(私はそれを何度も行いました)。

お役に立てれば!

于 2013-03-27T13:14:20.473 に答える
1

これを試して。それが機能する場合、それはあなたが間違った親から子を削除しようとしていることを意味します。その場合、ランタイムエラーが発生するはずです。次のコードでエラーが発生しないが、画面にコンテンツが残っている場合は、コンテンツを複製しているコードがあります。これは、読み込みを行うコードが2回呼び出された場合に発生する可能性があります。

      var len:int = Clips.length;
      for( var i:int = 0; i < len; i++ ) {
      Clips[i].parent.removeChild(Clips[i]);        
      }
于 2013-03-27T13:10:30.597 に答える