[AS3] Space Invaders Laser Spawning

Hey, I am working on making a Space Invaders clone to practice up my AS3. One of the main things in this project is that I want to make all of the graphics through Actionscript, simply because I have never worked with any sort of object in Flash that way. It’s been an interesting challenge so far but I keep getting stumped on firing lasers. From what I can tell I have it semi-working, but when I press Space to fire I get this error:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Laser$iinit()
    at Ship/::movePlayer()

Here are my as files if any of you could give me a nudge in the right direction. :slight_smile:

Laser.as:

package {
    import flash.display.Sprite;
    import flash.display.DisplayObject;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import Ship;
    import GlobalVars;
    
    public class Laser extends Sprite {
        
        private var
        speed:Number = 12;
        
        public var
        intermediateY:Number = 0,
        laserY:Number = 0,
        spaceDown:Boolean = false,
        laser:Sprite,
        topStage:Boolean =  true;
        
        public function Laser() {
            laser = new Sprite();
            addChild(laser);
            laser.graphics.lineStyle(2,0xFFFFFF)
            laser.graphics.moveTo(-2,-10)
            laser.graphics.lineTo(3,0)
            laser.graphics.lineTo(-3,0)
            laser.graphics.lineTo(2,10)
            laser.visible = true;
            laser.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownEvent);
            laser.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpEvent);
            laser.stage.addEventListener(Event.ENTER_FRAME, moveLaser);
            laser.y = -190;
            laser.x = 0
            laser.y += intermediateY
        }
        private function moveLaser(event:Event) {
            if(spaceDown) {
                addChild(laser);
                laser.y = -190;
                laser.x = GlobalVars.vars.playerX
                intermediateY -= speed
                if(laser.y >= 255){
                    removeChild(laser);
                }
            }
        }
        private function keyDownEvent(event:KeyboardEvent) {
            removeChild(laser);
            if(event.keyCode == 32) {
                
            }
        }
        
        private function keyUpEvent(event:KeyboardEvent) {
            if(event.keyCode == 32) {
                laser.y == 200
            }
        }
    }
}

Ship.as:

package {
    import flash.display.Sprite;
    import flash.display.DisplayObject;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import GlobalVars;
    
    public class Ship extends Sprite {
        
        GlobalVars.vars.playerX = 0;
        
        public var 
        cTime:Number = 0,
        cLimit:Number = 1,
        player:Sprite,
        rightStage:Boolean = true,
        leftStage:Boolean = true,
        PRESS_LEFT:Boolean = false,
        PRESS_RIGHT:Boolean = false,
        PRESS_SPACE:Boolean = false,
        shootAllow:Boolean = false,
        intermediateX:Number = 0,
        playerY:Number = 0,
        playerShip:Sprite,
        playerFriction:Number = 0.0001;
        
        private var
        speed:Number = 10;

        public function Ship(){
            player = new Sprite();
            addChild(player);
            player.graphics.lineStyle(1, 0x00FF00);
            player.graphics.beginFill(0x00FF00);
            player.graphics.drawRect(0,5,40,10);
            player.graphics.endFill()
            player.graphics.beginFill(0x00FF00);
            player.graphics.drawRoundRect(0,-2.5,40,15,8);
            player.graphics.endFill()
            player.graphics.beginFill(0x00FF00);
            player.graphics.drawRect(16,-9,8,8);
            player.graphics.endFill()
            player.x = 0;
            player.y = 222.5;
            player.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownEvent)
            player.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpEvent)
            player.stage.addEventListener(Event.ENTER_FRAME, movePlayer)
        }
        
        private function movePlayer(event:Event) {
            player.x = GlobalVars.vars.playerX
            GlobalVars.vars.playerX += intermediateX
            intermediateX *= playerFriction;
            if (player.x >= 280){
                rightStage = false;
                player.x == 280
            }
            if (player.x <= -280) {
                leftStage = false;
                player.x == -280
            }
            if (PRESS_LEFT && leftStage) {
                GlobalVars.vars.playerX -= speed;
                rightStage = true;
            }
            if (PRESS_RIGHT && rightStage) {
                GlobalVars.vars.playerX += speed;
                leftStage = true;
            }
            if (PRESS_SPACE && shootAllow) {
                shootAllow = false;
                var newLaser:Laser = new Laser();
                newLaser.x = player.x;
                newLaser.y = player.y;
            }
            if (cTime < cLimit){
            cTime ++;
            } else {
                shootAllow = true;
                cTime = 0;
            }
        }
        private function keyDownEvent(event:KeyboardEvent):void {
            if (event.keyCode == 37) {
                PRESS_LEFT = true;
            }
            if(event.keyCode == 39) {
                PRESS_RIGHT = true;
            }
            if(event.keyCode == 32) {
                PRESS_SPACE = true;
            }
        }
        private function keyUpEvent(event:KeyboardEvent):void {
            if (event.keyCode == 37) {
                PRESS_LEFT = false;
            }
            if(event.keyCode == 39) {
                PRESS_RIGHT = false;
            }
            if(event.keyCode == 32) {
                PRESS_SPACE = false;
            }
        }
    }
}

GlobalVars.as:

package {
    
    public class GlobalVars 
    {
        public static var vars:Object = [];
    }
}

Almost forgot to add the GlobalVars.