AS3 Flash Video Game getting Error #1009

Hey everybody,

I’m currently in the process of making a flash video game where you fly around as a pigeon (named Barnaby) in a park and poop on people’s heads while dodging obstacles like balloons and stuff :). Right now, though, I can’t seem to get rid of this dang error “Error #1009: Cannot access a property or method of a null object reference.”

If anyone could help point me in the right direction as to why I’m getting this error it would be MUCH appreciated. I’m pretty new to actionscripting and this is by far the biggest actionscript project I’ve tackled yet. The code is stopping in my character class Barnaby.as at the line:

“keydown = new multiKeys(rootClass.stage);”

Here’s my document class MainGame.as:

package games.pigeon
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import multiKeys;
	
	public class MainGame extends MovieClip 
	{
		private var screen:MovieClip;
		private var character:MovieClip;
		
		public function MainGame()
		{
			character = new games.pigeon.Barnaby();//never gets past here
			screen = new games.pigeon.gameScreen();
			
			addChild( screen );
			addChild( character );
			
			character.x = 115.8;
			character.y = 124.4;
			screen.x = 462.5;
			screen.y = 309.4;
		}
	}
}

Here’s my character class Barnaby.as:

package games.pigeon{
	
	import multiKeys;
	import flash.events.Event;
	import flash.display.MovieClip;
	import flash.events.TimerEvent;
	import flash.display.Sprite;
	import flash.utils.Timer;
	
	public class Barnaby extends MovieClip{
		
		private var topSpeed:Number = 15;
		private var speed:Number = 4;
		private var acceleration:Number = 1.5;
		private var upSpeed:Number = speed;
		private var downSpeed:Number = speed;
		private var leftSpeed:Number = speed;
		private var rightSpeed:Number = speed;
		private var canpoop:Boolean = true;
		private var canmove:Boolean = true;
		
		private var rootClass:MovieClip = MovieClip(root);
		private var poopholder:Sprite = new Sprite();
		private var keydown:Object;
		
		
		public function Barnaby(){
			
			addChild(poopholder);//Sprite to hold all the poops that will eventually be created
			
			addEventListener(Event.ENTER_FRAME, go);
			
			stage.addEventListener(Event.ENTER_FRAME, poop);
			
		}
	
		private function go(e:Event):void{
			
			keydown = new multiKeys(rootClass.stage); //THIS IS WHERE THE CODE ERRORS AND STOPS///////////
			
			//Gives the acceleration a top speed
			if(downSpeed > topSpeed){
				downSpeed = topSpeed;
			}
			if(upSpeed > topSpeed){
				upSpeed = topSpeed;
			}
			if(rightSpeed > topSpeed){
				rightSpeed = topSpeed;
			}
			if(leftSpeed > topSpeed){
				leftSpeed = topSpeed;
			}
			
			//Uses the multiKey class (and the IS function in said class) to control character
			if(keydown.IS(40) && canmove){
				{downSpeed = downSpeed * acceleration; y+=downSpeed;}
			} else {downSpeed = speed;}
			if(keydown.IS(39) && canmove){
				{rightSpeed = rightSpeed * acceleration; x+=rightSpeed;}
			} else {rightSpeed = speed;}
			if(keydown.IS(38) && canmove){
				{upSpeed = upSpeed * acceleration; y-=upSpeed;}
			} else {upSpeed = speed;}
			if(keydown.IS(37) && canmove){
				{leftSpeed = leftSpeed * acceleration; x-=leftSpeed;}
			} else {leftSpeed = speed;}
			
			//Adds screen limits
			if(y > 350) {y = 350;}
			if(y < 50) {y = 50;}
			if(x > 900) {x = 900;}
			if(x < 50) {x = 50;}
		}
		
		private function poop(e:Event){
			
			//Timer used so actions (ie moving and pooping) cant be taken immediatly after a previous action
			var time:Timer = new Timer(500);
			time.addEventListener(TimerEvent.TIMER, wait);
			
			if (keydown.IS(32) && canpoop){
				
				var poo:Sprite = new ThePoop();
				
				canmove = false;
				canpoop = false;
				
				time.start();
				
				poopholder.addChild(poo);
				poo.y = y + 30;
				poo.x = x - 10;
			}
			
			function wait(event:TimerEvent):void{
				time.stop();
				canmove = true;
				canpoop = true;
			}
		}
	}
}

and finally, here’s the multiKey.as:

package
{
	import flash.events.KeyboardEvent;
	import flash.events.Event;
	import flash.display.Stage;
	import flash.display.MovieClip;
	
	public class multiKeys extends Object{
		
		private var keyspressed:Object;
		
		public function multiKeys(core:Stage):void{
			keyspressed = new Object();
			core.addEventListener(KeyboardEvent.KEY_DOWN, addKey);
			core.addEventListener(KeyboardEvent.KEY_UP, removeKey);
		}
		
		private function addKey(e:KeyboardEvent):void{
			keyspressed[e.keyCode] = true;
		}
		
		private function removeKey(e:KeyboardEvent):void{
			delete keyspressed[e.keyCode];
		}
		
		public function IS(keys:uint):Boolean{
			return keys in keyspressed;
		}
	}
}

I know that’s a lot of code, and if you need me to shorten it up or anything, or if you need me to give any more info, let me know. Thanks so much!

Markskamo