user3411184
user3411184

Reputation: 71

Actionscript 3 cannot access a property or method of a null object reference

I'm still really new about classes and stuffs. So, I tried making this and I got an error: Access of undefined property. Why speedX and speedY var still error although I've defined it in public var in the main class?

Thanks!

EDITED: I've tried calling the variables from other class with main.speedX and main.speedY But it got error : Cannot access a property or method of a null object reference. at Ball/moveBall()

This is the Main code:

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

public class Main extends MovieClip
{

    public var speedX:Number = 5;
    public var speedY:Number = 5;
    public var speedMax:Number = 10;
    private var ball:MovieClip = new Ball();
    private var paddle:MovieClip = new Paddle();

    public function Main()
    {
        paddle.addEventListener(Event.ENTER_FRAME, movePaddle);

        addChild(ball);
        addChild(paddle);
            }

}

}

This is the Ball Movie Clip Code:

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

public class Ball extends MovieClip
{   public var main:Main;

    public function Ball()
    {addEventListener(Event.ENTER_FRAME, moveBall);
        main= new Main();
    }
    public function moveBall(e:Event):void
    {
        x += main.speedX;
        y += main.speedY;
    }

}

}

Upvotes: 0

Views: 185

Answers (2)

Dave
Dave

Reputation: 169

Here's another possible solution where you would be passing main to ball to use the values of speed stored in Main.

public class Main extends MovieClip
{
    public var speedX:Number = 5;
    private var ball:MovieClip;
    public function Main()
    {
        ball=new Ball(this);
        addChild(ball);
     }

}

and

public class Ball extends MovieClip
{   
      private var _main:Main;
      public function Ball(main:Main)
      {
          _main=main;
          addEventListener(Event.ENTER_FRAME, moveBall);
      }

      public function moveBall(e:Event):void
      {
          x += _main.speedX;
      }
  }
}

Upvotes: 0

axelduch
axelduch

Reputation: 10849

That's because your class Ball cannot access speedX and speedY inside the event callback. Why not add speedX and speedY to your Ball class directly instead ?

public class Ball extends MovieClip
{   
    public var speedX:Number;
    public var speedY:Number;

    public function Ball(sX:Number = 0, sY:Number = 0)
    {
        this.speedX = sX;
        this.speedY = sY;

        addEventListener(Event.ENTER_FRAME, moveBall);
    }

    public function moveBall(e:Event):void
    {
        x += speedX;
        y += speedY;
    }
}

Upvotes: 1

Related Questions