错误#1034 on if(contains(array [for-variable]))

时间:2014-06-08 18:40:07

标签: actionscript-3 contains

我正在Flash中创建一个水平平台游戏,我尝试创建一个函数来删除包含可能崩溃的障碍的MovieClip,然后再添加整个地图,制作一种重新启动。

blockArr包含一半的障碍。

flameArr包含另一半。

这些数组填充在Map1函数中。

功能:

    function removeBlocks(TimerEvent):void{
for (var t:int = 0; t < blockArr.length; t++){
    if(blockArr[t] == null){
        blockArr = [];
        }
    if(blockArr[t] != null){
        if(contains(blockArr[t])){
        blockArr[t].parent.removeChild(blockArr[t]);
        blockArr[t] = null;
        }
    }
    if(flameArr[t] == null){
        flameArr[t] = [];
    }
    if(flameArr[t] != null){
        if(contains(flameArr[t])){
        flameArr[t].parent.removeChild(flameArr[t]);
        flameArr[t] = null;
        }
    }
    trace(blockArr);
    if(blockArr == []){
        Map1();
        removeMapTimer.stop();
        blockMoveTimer.start();
    }
}
}

但是,此代码返回此错误:

TypeError:错误#1034:类型强制失败:无法将[] @ 2754c641转换为flash.display.DisplayObject。
    在ImpGameWork14_fla :: MainTimeline / removeBlocks()[ImpGameWork14_fla.MainTimeline :: frame2:98]
    在flash.utils :: Timer / _timerDispatch()
    在flash.utils :: Timer / tick()

此代码的目的是删除和删除这些数组的内容,因为这是障碍/地图。之后,它将检查主要障碍物阵列是否为空if(blockArr == []),如果是,则部署Map1功能,这会增加阵列和阶段(addChild(障碍物))的障碍。关于如何实现这一目标的任何帮助?

1 个答案:

答案 0 :(得分:0)

在这里发表评论可能的解决方案:

public function Reset(ev:TimerEvent):void
    {
        //Remove the Blocks
        removeBlocks();

        reloadMap();

    }

    private function removeBlocks():void
    {
        //Cycle each block
        for each(var block : DisplayObject in blockArr)
        {
            //If it is in the DisplayList 
            if(this.contains(block))
                this.removeChild(block); //Remove it                
        }

        //Clear the Array
        blockArr.length = 0;
    }

    private function reloadMap():void
    {
        Map1();
        removeMapTimer.stop();
        blockMoveTimer.start();
    }

关于代码中的错误#1034,编译器只是告诉你“contains(DisplayObject)”需要一个DisplayObject,而“blockArr [i]”的类型是Object。 要删除错误,解决方案是告诉编译器blockArr [i]的类型是DisplayObject(类型转换):

this.contains(blockArr[i] as DisplayObject);