0

私はフラッシュを使用してiPhone用のゲームに取り組んでいます。メモリが重要なので、不要なdisplayObjectsをクリーンアップしたいと思います。削除する必要のあるオブジェクトはすべて、splice()を使用して配列から別の配列に取得されたMovieClipsです。これがコードです。

public function onTick(e:TimerEvent):void 

{randomNr = Math.random();

if ( randomNr > 0.9 )

{var newFriend:Friend = new Friend(randomX、-15); newFriend.cacheAsBitmap = true; army.push(newFriend); addChild(newFriend); }

for(var i:int = 0; i <army.length; i ++){army [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 = delete.length; for(var i:int = 0; i <totalDel; i ++){removeChild(deleted [i]); } trace(totalDel + "削除から削除"); }

私の問題は、CleanUp関数を使おうとするとエラーが発生することです。配列内のすべてのオブジェクトをトレースでき、[object Friend]と表示されますが、displayListから削除しようとすると、次のエラーが発生します:エラー#1034:タイプ強制に失敗しました:[]@2c11309をflash.displayに変換できません。 DisplayObject。

私が使用している間違った方法かもしれません!?いくつかのガイダンスが必要です:)

4

2 に答える 2

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");
}
于 2011-01-04T16:07:34.907 に答える
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");
        }

このようにして、配列を折りたたむことなくすべてのオブジェクトが削除されます。これはまさに私が必要としていたことです...これが誰かが同じ問題を抱えるのに役立つことを願っています。

于 2011-01-10T12:56:58.067 に答える