在我的课程中,我调用了这个函数
MovieClip(root).increaseScore();
处理主.as文件中的分数。 在执行关卡期间一切正常。但是当关卡完成并且屏幕转到另一帧时,游戏崩溃并给我这个错误
TypeError:错误#1009:无法访问null的属性或方法 对象参考。
在上面一行。
我该如何解决这个问题? 感谢
编辑: 这是我告诉它addScore,这是在GameController.as文件
private function removeBubble(bubble, addScore:Boolean)
{
var delay:Timer = new Timer(200, 1);
delay.addEventListener(TimerEvent.TIMER_COMPLETE, function(e:TimerEvent)
{
if(bubble.parent==mcGameStage)
{
var j:int = bubbleList.indexOf(bubble);
bubbleList.splice(j,1);
if(addScore) bubble.addScore();
mcGameUI.txtScorePlayer.text = String(playerScore);
mcGameStage.removeChild(bubble);
}
e.currentTarget.removeEventListener(e.type, arguments.callee);
checkWin();
});
delay.start();
}
这是checkWin函数:
private function checkWin()
{
if (playerBlue + playerRed + playerYellow + playerOrange + playerPurple + playerGreen == 0)
{
gameWin();
}
}
private function gameWin()
{
while (bubbleList.numChildren > 0)
{
bubbleList.removeChildAt(0);
}
mcGameUI.btnMixBlue.removeEventListener(MouseEvent.CLICK, mixBlue);
mcGameUI.btnMixRed.removeEventListener(MouseEvent.CLICK, mixRed);
mcGameUI.btnMixYellow.removeEventListener(MouseEvent.CLICK, mixYellow);
mcGameUI.btnNeedle.removeEventListener(MouseEvent.CLICK, activateNeedle);
mcGameStage.removeEventListener(Event.ENTER_FRAME,update);
mcGameStage.removeEventListener(MouseEvent.CLICK, checkToHit);
removeEventListener(Event.ADDED_TO_STAGE, gameAddedToStage );
stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
if (mouseCursor != null)
{
mouseCursor.removeEventListener(Event.ENTER_FRAME,followMouse);
mouseCursor = null;
}
gotoAndPlay("level1win");
}
在课堂上,
public function addScore()
{
root["increaseScore"]();
}
这就是increaseScore所做的事情
public function increaseScore()
{
playerScore += 1000;
}
那么null对象在哪里? d: 我也很缺乏使用调试器的经验,所以我很抱歉,如果这很容易解决。我试过了,在来这里之前无法弄明白。 什么是OPP方法? 什么是FrameScript? 此外,该课程是MovieClip
谢谢:)
答案 0 :(得分:0)
在调试器的帮助下完成此操作!
错误告诉您某些内容为空,并且您正在尝试访问它。那不好,所以让我们想想什么可能是空的?
1)您的影片剪辑实例可能为null。 2)影片剪辑实例的increaseScore()方法可能会尝试访问null的内容
在我撰写此答案时,您没有发布任何我可以分析的代码,所以我不能肯定地说。
一些可能的问题:
您的类不称为MovieClip,但您只是尝试将根对象转换为MovieClip。事实上,MovieClip没有increaseScore()方法。您应该使用
调用increaseScore()方法root["increaseScore"]();
这将调用根时间轴的方法,但由于我们使用的是弱类型,因此稍后调试时可能会遇到问题。但我想这是你在一帧中编写所有代码而不是使用OPP方法时所付出的代价。
答案 1 :(得分:0)
错误中说明了这里的真正原因:无法访问空对象引用的属性或方法。
这意味着MovieClip(root)
为空(它甚至不会检查函数是否存在)。原因可能是三个:
root
的课程不是DisplayObject
。该属性是DislpayObject类的一部分,因此如果您将其用于其他类型的不扩展它的类,它将无法工作。parent
- 错误应该相同。