2013-08-05 70 views
-1

我是一个相当新的AS3编程,并开始使用相当古老的MJW AvoiderGame教程。由于本教程有点旧,在学习AS3时遇到了很多错误。现在我收到了一个我无法弄清楚的错误。错误#1009与AS3

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
at AvoiderGame/onTick() 
at flash.utils::Timer/_timerDispatch() 
at flash.utils::Timer/tick() 

这个问题似乎是在AvoiderGame类的onTick函数中。这里是AvoiderGame类:

package 
{ 
    import flash.display.MovieClip; 
    import flash.utils.Timer; 
    import flash.events.TimerEvent; 

public class AvoiderGame extends MovieClip 
{ 
    public var army:Array; 
    public var enemy:Enemy; 
    public var avatar:Avatar; 
    public var gameTimer:Timer; 
    public var gameClock:Clock; 

    public function AvoiderGame() 
    { 
     army = new Array(); 
     var newEnemy = new Enemy(200, -15); 
     army.push(newEnemy); 
     addChild(newEnemy); 

     avatar = new Avatar(); 
     addChild(avatar); 
     avatar.x = mouseX; 
     avatar.y = mouseY; 

     gameTimer = new Timer(25); 
     gameTimer.addEventListener(TimerEvent.TIMER, onTick); 
     gameTimer.start(); 
    } 

    public function onTick(timerEvent:TimerEvent):void 
    { 
     gameClock.addToValue(25); 
     if (Math.random() < 0.1) 
     { 
      var randomX:Number = Math.random() * 800; 
      var newEnemy:Enemy = new Enemy(randomX, -15); 
      army.push(newEnemy); 
      addChild(newEnemy); 
      gameScore.addToValue(10); 
     } 
     avatar.x = mouseX; 
     avatar.y = mouseY; 

     for each (var enemy:Enemy in army) 
     { 
      enemy.moveDownABit(); 
      if (avatar.hitTestObject(enemy)) 
      { 
       gameTimer.stop(); 
       dispatchEvent(new AvatarEvent(AvatarEvent.DEAD)); 
      } 
     } 
    } 

    public function getFinalScore():Number 
    { 
     return gameScore.currentValue; 
    } 

    public function getFinalClockTime():Number 
    { 
     return gameClock.currentValue; 
    } 
} 

}

+0

'公共var gameClock:时钟;'你在哪里实例化? – Marijn

回答

3

这是相当明显的 - 在onTick(),第一行是

gameClock.addToValue(25); 

但你永远不初始化gameClock领域。这样它有默认的null值,因此你看到的错误。您应该相应地初始化它,就像初始化gameTimer字段的方式。