我在AS3中制作了一个游戏,文件中有2个。一个是HWMain和HWGame。当我点击开始按钮时,脚本从HWMain切换到HWGame,但我得到了这个错误。
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。我该怎么办?
谢谢。
根据您所引用的内容,您的HWGame
实例可能尚未添加到显示列表中;因此,当您调用时,stage
就是null
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
}
}
}