MovieClip(root)行似乎在崩溃我的游戏

时间:2014-06-18 04:07:22

标签: actionscript-3 flash

在我的课程中,我调用了这个函数

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

谢谢:)

2 个答案:

答案 0 :(得分:0)

在调试器的帮助下完成此操作!

错误告诉您某些内容为空,并且您正在尝试访问它。那不好,所以让我们想想什么可能是空的?

1)您的影片剪辑实例可能为null。 2)影片剪辑实例的increaseScore()方法可能会尝试访问null的内容

在我撰写此答案时,您没有发布任何我可以分析的代码,所以我不能肯定地说。

一些可能的问题:

您的类不称为MovieClip,但您只是尝试将根对象转换为MovieClip。事实上,MovieClip没有increaseScore()方法。您应该使用

调用increaseScore()方法
root["increaseScore"]();

这将调用根时间轴的方法,但由于我们使用的是弱类型,因此稍后调试时可能会遇到问题。但我想这是你在一帧中编写所有代码而不是使用OPP方法时所付出的代价。

答案 1 :(得分:0)

错误中说明了这里的真正原因:无法访问空对象引用的属性或方法

这意味着MovieClip(root)为空(它甚至不会检查函数是否存在)。原因可能是三个:

  • 您的文档类不是MovieClip(可能是Sprite)。
  • 您使用root的课程不是DisplayObject。该属性是DislpayObject类的一部分,因此如果您将其用于其他类型的不扩展它的类,它将无法工作。
  • 您正在使用这段代码之前您已将实例添加到舞台(最可能的原因)。 root属性表示树中最顶层的显示对象。如果您还没有将孩子添加到树中,那么它没有根:)请查看parent - 错误应该相同。