2011-01-04 4 views
0

私はFlashを使用してiPhone用のゲームを開発しています。メモリが重要なので、不要なdisplayObjectをクリーンアップします。削除する必要があるすべてのオブジェクトは、スプライス()を使用して配列から別の配列に取り込まれたMovieClipsです。ここにコードがあります。DisplayListから配列オブジェクトを削除する

public function onTick(e:TimerEvent):void 

{ randomNr = Math.random();

if (randomNr > 0.9) 

{VARのnewFriend:友人=新しいフレンド(randomX、-15)。 newFriend.cacheAsBitmap = true; army.push(newFriend); addChild(newFriend); }の

(VAR I:INT = 0; I < army.length; iは++){ 軍[I]・Y + = 3。

if (avatar.hitTestObject(army[i])) 
{ 
mood = false; 
TweenLite.to(army[i], .3, {x:308, y:458, scaleX:.7, scaleY:.7, ease:Expo.easeOut, onComplete:fadeFace, onCompleteParams:[army[i],mood]}); 
deleted.push(army.splice(i,1)); 
} 

}}

private function cleanUp(e:MouseEvent):void 

{VARのtotalDel:INT = deleted.length。 for(var i:int = 0; i < totalDel; i ++) { removeChild(deleted [i]); } トレース(totalDel + "削除済みから削除"); }

私の問題は、クリーンアップ機能を使用しようとするとエラーが発生することです。 配列内のすべてのオブジェクトをトレースすることができますが、[オブジェクトフレンド]として表示されますが、displayListから削除しようとするとエラーが表示されます:エラー#1034:型強制が失敗しました:[2c11309をflash.display .DisplayObject。

私は間違った方法を使用している可能性があります!いくつかのガイダンスを必要とする

答えて

0

私に最適なソリューションを渡してしまった友人コーダ:

private function cleanUp(arr:Array):void 
     { 
      var toDelete:DisplayObject; 
      var totalDel:int = 0; 

      while(arr.length >0) 
      { 
       toDelete = arr[0]; 
       toDelete.parent.removeChild(toDelete); 
       arr.shift(); 
       totalDel++ 
      } 
      //trace(totalDel + "deleted from array " + arr.length + " left"); 
     } 

この方法ですべてのオブジェクトを配列を崩壊させることなく削除されます。これはまさに私が必要としていたものです...これが誰かが同じ問題を抱えるのを助けることを願っています。

0

表示オブジェクトとしてそれぞれ「フレンド」をキャストしてみ:)してください:

var totalDel:int = deleted.length; 
for(var i:int = 0; i < totalDel ;i++) { 
var toDelete:DisplayObject = deleted[i] as DisplayObject; 
removeChild(toDelete); 
trace(totalDel + "Dele from deleted"); 
} 
+0

これは明らかにオブジェクトの値をnullにするため、削除しようとすると新しいエラーが発生します。 – VoodooBurger

+0

うーん... "toDelete"をnullにしていますか?あなたはいつcleanUp関数を呼び出していますか? – redconservatory

+0

上記のwhileループの問題を解決しました:) thxが手助けをしてくれました – VoodooBurger

関連する問題