Удаление объектов массива из DisplayList - PullRequest
0 голосов
/ 04 января 2011

Я работаю над игрой для iPhone с использованием флеш-памяти, и, поскольку память имеет решающее значение, я хочу очистить дисплей. Объекты не нужны.Все объекты, которые мне нужно удалить, это MovieClips, взятые из одного массива в другой с помощью splice ().Вот код:

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);}

для (var i: int = 0; i

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 = dele.length;for (var i: int = 0; i

Моя проблема в том, что я получаю сообщение об ошибке при попытке использовать функцию очистки.Я могу отследить все объекты в массиве, и они отображаются как [объект Friend], но при попытке удалить из displayList я получаю эту ошибку: Ошибка № 1034: сбой приведения типа: невозможно преобразовать [] @ 2c11309 в flash.display.DisplayObject.

Возможно, это неправильный метод, который я использую !?Нужна помощь, пожалуйста:)

Ответы [ 2 ]

0 голосов
/ 10 января 2011

В итоге мой друг-кодер вручил мне идеальное решение:

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 голосов
/ 04 января 2011

Попробуйте привести каждого «Друга» в качестве экранного объекта:

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");
}
...