我正在制作一个游戏,如果敌人的子弹击中用户,子弹就会消失。一切都很好,除了我不断得到,
'错误#1009:无法访问null对象的属性或方法 参考'
一旦子弹击中用户(虽然子弹消失了)。它让我感到困惑,因为我在另一个完美的类中使用了几乎完全相同的代码。
package classes.enemy
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
import classes.Main;
public class Bullet extends MovieClip
{
var speed:Number;
public function initialize()
{
var stageReff:Stage = this.stage as Stage;
stage.addEventListener("enterFrame", enterFrame);
}
//code
function enterFrame(e:Event):void
{
this.x += speed;
if(this.hitTestObject(Main.user))
{
removeEventListener("enterFrame", enterFrame);
this.parent.removeChild(this);
// line above gives the error.
}
}
}
}
我不知道可能出现什么问题。 提前谢谢。
答案 0 :(得分:2)
我的猜测是,它与你在舞台上添加一个输入帧事件监听器的事实有关,但是试图将它从监听对象本身中删除。
尝试更改
var stageReff:Stage = this.stage as Stage;
stage.addEventListener("enterFrame", enterFrame);
到
addEventListener("enterFrame", enterFrame);
答案 1 :(得分:0)
你不是从舞台上移除事件监听器,而是对象本身:)
我不建议这样做,在主游戏类中创建一个监听器,并在所有对象上调用更新函数!
答案 2 :(得分:0)
它失败的原因是因为你要从它的父母那里删除你的子弹。因此,当您引用this.parent
时,它会返回null
,因为根本就没有父级了。您正尝试删除ENTER_FRAME
事件,但由于您在舞台上设置了原始ENTER_FRAME
事件,因此该事件一直在运行。你可以简单地修复它:
if(this.x > 30)
{
stage.removeEventListener("enterFrame", enterFrame);
this.parent.removeChild(this);
}
但是就像@RasmusWriedtLarsen已经指出的那样,最好更全面地处理这些事件。并让父母处理删除Bullet
。