0

我正在使用 Flash 为 iPhone 开发游戏,由于内存至关重要,我想清理不需要的 displayObjects。我需要删除的所有对象都是使用 splice() 从某个数组到另一个数组的 MovieClip。这是代码。

public function onTick(e:TimerEvent):void 

{ randomNr = Math.random();

if ( randomNr > 0.9 )

{ var newFriend:Friend = new Friend(randomX, -15 ); newFriend.cacheAsBitmap = true; 军队.push(新朋友);addChild(新朋友); }

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

我的问题是尝试使用 CleanUp 功能时出现错误。我可以跟踪数组中的所有对象,它们显示为 [object Friend],但是当尝试从 displayList 中删除时,我收到此错误:错误 #1034:类型强制失败:无法将 []@2c11309 转换为 flash.display。显示对象。

可能是我使用的错误方法!?需要一些指导请:)

4

2 回答 2

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 回答
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 回答