-1

I'm a rather new to programming with AS3 and started with the rather old MJW AvoiderGame tutorial. Since this tutorial is a bit old, I have got a lot of errors while trying to learn AS3. Now I got an error that I cant figure out.

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()

The problem seems to be in the onTick function in AvoiderGame class. Here is the AvoiderGame class:

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;
    }
}

}

1 Answers1

3

It's fairly obvious - in onTick() the first line is

gameClock.addToValue( 25 );

but you never initialize the gameClock field. That way it has the default null value hence the error you see. You should initialize it accordingly just the way you initialize the gameTimer field.

andr
  • 15,970
  • 10
  • 45
  • 59