所以我已经坚持了大约两个星期,我不知道如何进步。
我有一系列名为" _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()
不知道这意味着什么:(
任何帮助表示感谢谢谢!
答案 0 :(得分:0)
问题来自这条线
更新功能中的removeChild(speeder[i]);
。
Speeder没有名为1
的属性,1显然来自你的for循环。
所以,要解决这个问题,你应该简单地调用
removeChild(speeder);
speeder
已经是数组位置i
的对象。将[]放在对象后面就像从它访问属性一样。基本上你是这样做的:
removeChild(speeder.1);