2012-07-30 68 views
1

我在AS3中做了一个游戏,我有2个文件。一个是HWMain和HWGame。当我点击开始按钮脚本从HWMain切换到HWGame,但我得到了这个错误。AS3:错误MethodInfo-26和25

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
at HWGame() 
at MethodInfo-26() 
at MethodInfo-25() 

这是我的代码。

public class HWGame extends MovieClip 
{ 
    var INIT_STATE:String = "INIT_STATE"; 
    var READY_STATE:String = "READY_STATE"; 
    var PLAYER_STATE:String = "PLAYER_STATE"; 
    var PLAY_STATE:String = "PLAY_STATE"; 
    var END_STATE:String = "END_STATE"; 
    var gameState:String; 

    //And another variable 

    public function HWGame() 
    { 
     gameState = INIT_STATE; 
     trace(gameState); 
     stage.addEventListener(Event.ENTER_FRAME, gameLoop); 

     function gameLoop(e:Event):void 
     { 
      switch (gameState) 
      { 
       case INIT_STATE : 
        initGame(); 
        break; 
       case READY_STATE : 
        ready(); 
        break; 
       case PLAYER_STATE : 
        startPlayer(); 
        break; 
       case PLAY_STATE : 
        playGame(); 
        break; 
       case END_STATE : 
        endGame(); 
        break; 
      } 
     } 

     function initGame():void 
     { 
      //I write the long code 
     } 

     function ready():void 
     { 
      //I write the long code 
     } 

     function startPlayer():void 
     { 
      //I write the long code 
     } 

     function playGame():void 
     { 
      //I write the long code 
     } 

     function endGame():void 
     { 
      //I write the long code 
     } 
    } 
} 

我试图修复它,我认为错误是在gameState = INIT_STATE。 我该怎么办?

谢谢。

+0

它更可能是这个'MovieClip'还未添加到舞台。因此'stage'可能在'stage.addEventListener(Event.ENTER_FRAME,gameLoop);'处为null。 – 2012-07-30 04:54:56

+0

@JasonSturges,所以..我必须删除阶段代码? – Faras 2012-07-30 06:28:29

回答

0

从您所引用的内容来看,很可能您的HWGame实例尚未添加到显示列表中;因此,stagenull当你拨打:

stage.addEventListener(Event.ENTER_FRAME, gameLoop); 

访问stage之前,你可以等到添加到舞台:

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 

    public class HWGame extends MovieClip 
    { 

     var INIT_STATE:String = "INIT_STATE"; 
     var READY_STATE:String = "READY_STATE"; 
     var PLAYER_STATE:String = "PLAYER_STATE"; 
     var PLAY_STATE:String = "PLAY_STATE"; 
     var END_STATE:String = "END_STATE"; 
     var gameState:String; 

     public function HWGame() 
     { 
      gameState = INIT_STATE; 

      addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
     } 

     protected function addedToStageHandler(event:Event):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 

      stage.addEventListener(Event.ENTER_FRAME, gameLoop); 
     } 

     protected function gameLoop(e:Event):void 
     { 
      switch (gameState) 
      { 
       case INIT_STATE: 
        initGame(); 
        break; 
       case READY_STATE: 
        ready(); 
        break; 
       case PLAYER_STATE: 
        startPlayer(); 
        break; 
       case PLAY_STATE: 
        playGame(); 
        break; 
       case END_STATE: 
        endGame(); 
        break; 
      } 
     } 

     protected function initGame():void 
     { 
      //I write the long code 
     } 

     protected function ready():void 
     { 
      //I write the long code 
     } 

     protected function startPlayer():void 
     { 
      //I write the long code 
     } 

     protected function playGame():void 
     { 
      //I write the long code 
     } 

     protected function endGame():void 
     { 
      //I write the long code 
     } 
    } 
} 
+0

非常感谢你.. 现在我知道它是如何工作..:D – Faras 2012-07-30 07:10:19