从数组中删除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);
}
}
您的问题来自for
循环,这一行正是:
for(var i:int = 0; i < this["parent"].enemyList.length; i++){
因为当当前对象接触到enemy
时,它将从其parent
中删除,对于for
循环的下一次迭代(如果有),this["parent"]
就是null
,这就是为什么会触发该错误,因为for
循环正在验证每次迭代的条件语句,该条件语句确定循环何时结束(在您的情况下为this["parent"].enemyList.length
)。
为了避免这种情况,您可以使用一个变量,例如,存储要在for
循环中使用的enemies
的编号。
在移除对象后,还可以在for
循环中使用break
语句来退出该循环。
希望这能有所帮助。