我在从数组中删除MovieClip时遇到问题。
我收到此错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Spiker/loop()".
秒杀(Spiker)被删除,但错误仍然让我烦恼..不知道如何解决这个问题?
这是我的代码:
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Spiker extends MovieClip {
public var spikeDirection:int = 1;
private var removed = false;
public function Spiker() {
// constructor code
trace("Spiker added");
addEventListener(Event.ENTER_FRAME, loop);
}
private function loop (evt){
this.x += spikeDirection * 10;
for(var i:int = 0; i < this["parent"].enemyList.length; i++){
if(removed == false){
if(this["parent"].enemyList[i].hitTestObject(this)){
trace("Spikerhit");
removed = true;
remove(evt);
}
}
}
}
public function remove (evt){
removeEventListener(Event.ENTER_FRAME, loop);
this["parent"].removeChild(this);
}
}
答案 0 :(得分:1)
你的问题来自你的for
循环,这一行完全符合:
for(var i:int = 0; i < this["parent"].enemyList.length; i++){
因为当你的当前对象触及enemy
时,它会从parent
移除,并且对于for
循环的下一次迭代(如果有的话),{{1是this["parent"]
这就是为什么会发出错误,因为null
循环正在验证每次迭代时确定循环何时结束的条件语句(for
在你的情况下)。
为避免这种情况,您可以使用变量,例如,存储要在this["parent"].enemyList.length
循环中使用的enemies
的数量。
在删除对象后退出该循环,您也可以在for
循环中使用break
语句。
希望可以提供帮助。