从阵列 AS3 中删除 MC
Removing MC from array AS3
我在从数组中删除 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
语句退出该循环。
希望能帮到你。
我在从数组中删除 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
语句退出该循环。
希望能帮到你。