ReferenceError:错误#1069 Actionscript 3

时间:2014-11-27 13:05:55

标签: arrays actionscript-3 reference

所以我已经坚持了大约两个星期,我不知道如何进步。

我有一系列名为" _main.speederArray"的电影剪辑。而且我试图这样做,以便如果它们相互碰撞,那么它们都会被摧毁。这是我在" Speeder课程中的代码"检测碰撞。

private function detectionHandler():void{
        //trace("array length", _main.speederArray.length);
        detectionID = _main.gameCounter;
        for ( var i:int = _main.speederArray.length -1; i >= 0; i--){

            var speeder:Speeder = _main.speederArray[i];

            if(speeder.destroyMe) continue;
            if(speeder.detectionID == this.detectionID) continue;

            if (boxIntersect(this, speeder)){

                    trace("collision");

                    destroyMe = true;
                    speeder.destroyMe = true;
            }
        }
    }

这是此代码引用的boxIntersect函数。它在同一个班级

private function boxIntersect ( speeder1:Speeder, speeder2:Speeder):Boolean{

        if(speeder1.x + speeder1.distRight < speeder2.x + speeder2.distLeft) return false; //checking for overlap on X axis
        if(speeder1.x + speeder1.distLeft > speeder2.x + speeder2.distRight) return false;
        if(speeder1.y + speeder1.distBot < speeder2.y + speeder2.distTop) return false; // checking for overlap on Y axis
        if(speeder1.y + speeder1.distTop > speeder2.y + speeder2.distBot) return false;



        return true;

    }

然后我认为这就是问题所在。我有一个名为&#34; spawner&#34;这就是我要处理正在创建和销毁的对象的地方。这是我试图从数组中拼接对象的代码,具体取决于destroyMe bool是否设置为true。在这个阶段,我已经把自己弄得一团糟,所以任何帮助都会非常感激!

    private function updateArray(e:Event):void{

        for(var i:int = _main.speederArray.length - 1; i>=0; i--){


            var speeder:Speeder = _main.speederArray[i];


            if(speeder.destroyMe){
                //trace("hello");
                removeChild(speeder[i]); // take it off the stage
                _main.speederArray[i] = null;
                _main.speederArray.splice(i, 1); //remove it from the array
            }

        }


    }

现在,游戏运行但是一旦同一阵列中的2个物体发生碰撞,我就会在输出窗口中得到碰撞痕迹,但是在我得到它之后直接:

ReferenceError:错误#1069:在com.game.Speeder上找不到属性1,并且没有默认值。     在com.game::Swwner/updateArray()

不知道这意味着什么:(

任何帮助表示感谢谢谢!

1 个答案:

答案 0 :(得分:0)

问题来自这条线 更新功能中的removeChild(speeder[i]);。 Speeder没有名为1的属性,1显然来自你的for循环。

所以,要解决这个问题,你应该简单地调用

removeChild(speeder);

speeder已经是数组位置i的对象。将[]放在对象后面就像从它访问属性一样。基本上你是这样做的:

removeChild(speeder.1);