Code is working but i am getting the following error and it is driving me insane:
TypeError: Error #2007: Parameter hitTestObject must be non-null.
at flash.display:isplayObject/_hitTest()
at flash.display:isplayObject/hitTestObject()
at PlatformGame/checkCollisions()
at PlatformGame/gameLoop()

Here is my Frankenstein code...i just need it working. Error happens when I remove the numOfKeys-- where I examine the level. Had to remove some code because of length when posting here on FK.

Actionscript Code:
package
{
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.utils.getTimer;
    import flash.utils.*;
   
    public class PlatformGame extends MovieClip
    {
        // movement constants
        static const gravity:Number = .001;

        // screen constants
        //static const edgeDistance:Number = 100;
        static const LRedgeDistance:Number =  800/2
        static const TBedgeDistance:Number =  210
        static const cameraAcel:Number = 10;
       

        // object arrays
        private var fixedObjects:Array;
        private var otherObjects:Array;
       
        // hero and enemies
        private var hero:Object;
        private var enemies:Array;
        private var keys:Array;
        private var doors:Array;
       
        // game state
        private var playerObjects:Array;
        private var gameScore:int;
        private var gameMode:String = "start";
        private var playerLives:int;
        private var lastTime:Number = 0;
        private var numOfkeys:Number = 0;
       
       
        // start game
        public function startPlatformGame()
        {
            playerObjects = new Array();
            gameScore = 0;
            gameMode = "play";
            playerLives = 3;
            trace("!");
        }
       
        // start level
        public function startGameLevel()
        {
           
            // create characters
            createHero();
            addEnemies();
            addKeys();
           
           
            // examine level and note all objects
            examineLevel();
           
            // add listeners
            this.addEventListener(Event.ENTER_FRAME,gameLoop);
            stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
            stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
           
            // set game state
            gameMode = "play";
            addScore(0);
            showLives();
        }
       
        // creates the hero object and sets all properties
        public function createHero()
        {
            hero = new Object();
            hero.mc = gamelevel.hero;
            hero.dx = 0.0;
            hero.dy = 0.0;
            hero.inAir = false;
            hero.readyJump = true;
            hero.direction = 1;
            hero.animstate = "stand";
            hero.walkAnimation = new Array(2,3,4,5,6,7,8);
            hero.animstep = 0;
            hero.jump = false;
            hero.jumpNum = 0;
            hero.numAllowJumps = 2
            hero.moveLeft = false;
            hero.moveRight = false;
            hero.jumpSpeed = .9;
            hero.walkSpeed = .3;
            hero.width = 80.0;
            hero.height = 120.0;
            hero.startx = hero.mc.x;
            hero.starty = hero.mc.y;
        }
       
        // finds all enemies in the level and creates an object for each
        public function addEnemies()
        {
            enemies = new Array();
            var i:int = 1;
            while (true)
            {
                if (gamelevel["enemy"+i] == null) break;
                var enemy = new Object();
                enemy.mc = gamelevel["enemy"+i];
                enemy.dx = 0.0;
                enemy.dy = 0.0;
                enemy.inAir = false;
                enemy.direction = 1;
                enemy.animstate = "stand"
                enemy.walkAnimation = new Array(2,3,4,5);
                enemy.animstep = 0;
                enemy.jump = false;
                enemy.moveRight = true;
                enemy.moveLeft = false;
                enemy.jumpSpeed = 1.0;
                enemy.walkSpeed = .08;
                enemy.width = 30.0;
                enemy.height = 30.0;
                enemies.push(enemy);
                i++;
            }
        }
        public function addKeys()
        {
            keys = new Array();
            var i:int = 1;
           
            while (true)
            {
               
                if (gamelevel["key"+i] == null) break;
                var key = new Object();
                key.mc = gamelevel["key"+i];
                keys.push(key);
                i++;
            }
        }
        // finds all enemies in the level and creates an object for each
       
       
        // look at all level children and note walls, floors and items
       
        public function examineLevel()
        {
            fixedObjects = new Array();
            otherObjects = new Array();
           
            for(var i:int=0;i<this.gamelevel.numChildren;i++)
            {
                var mc = this.gamelevel.getChildAt(i);
                // add floors and walls to fixedObjects
                if ((mc is Floor) || (mc is Wall) || (mc is mainFloor) || (mc is mainWall) || (mc is Ledge) || (mc is wallEndT)|| (mc is wallEndB) || (mc is LedgeL) || (mc is LedgeC) || (mc is LedgeR) || (mc is DoorTop) || (mc is DoorBottom && numOfkeys < 1))
                {
                    var floorObject:Object = new Object();
                    floorObject.mc = mc;
                    floorObject.leftside = mc.x;
                    floorObject.rightside = mc.x+mc.width;
                    floorObject.topside = mc.y;
                    floorObject.bottomside = mc.y+mc.height;
                    fixedObjects.push(floorObject);
                   
                }
               
                // add treasure, key and door to otherOjects
                else if ((mc is Treasure) || (mc is DoorBottom) || (mc is Chest))
                {
                    otherObjects.push(mc);
                }
            }
        }
       
       
        // perform all game tasks
        public function gameLoop(event:Event)
        {
            trace(numOfkeys)
            // get time differentce
            if (lastTime == 0) lastTime = getTimer();
            var timeDiff:int = getTimer()-lastTime;
            lastTime += timeDiff;
           
            // only perform tasks if in play mode
            if (gameMode == "play")
            {
                moveCharacter(hero,timeDiff);
                moveEnemies(timeDiff);
                checkCollisions();
                checkKeys();
                scrollWithHero();
            }
        }
       
        // loop through all enemies and move them
        public function moveEnemies(timeDiff:int)
        {
            for(var i:int=0;i<enemies.length;i++)
            {
               
                // move
                moveCharacter(enemies[i],timeDiff);
               
                // if hit a wall, turn around
                if (enemies[i].hitWallRight)
                {
                    enemies[i].moveLeft = true;
                    enemies[i].moveRight = false;
                }
               
                else if (enemies[i].hitWallLeft)
                {
                    enemies[i].moveLeft = false;
                    enemies[i].moveRight = true;
                }
            }
        }
       
        // primary function for character movement
        public function moveCharacter(char:Object,timeDiff:Number) {
            if (timeDiff < 1) return;

            // assume character pulled down by gravity
            var verticalChange:Number = char.dy*timeDiff + timeDiff*gravity;
            if (verticalChange > 15.0) verticalChange = 15.0;
            char.dy += timeDiff*gravity;
           
            // react to changes from key presses
            var horizontalChange = 0;
            var newAnimState:String = "stand";
            var newDirection:int = char.direction;
            if (char.moveLeft) {
                // walk left
                horizontalChange = -char.walkSpeed*timeDiff;
                newAnimState = "walk";
                newDirection = -1;
            } else if (char.moveRight) {
                // walk right
                horizontalChange = char.walkSpeed*timeDiff;
                newAnimState = "walk";
                newDirection = 1;
            }
            if (char.jump) {
                // start jump
                char.jump = false;
                char.dy = -char.jumpSpeed;
                verticalChange = -char.jumpSpeed;
                newAnimState = "jump";
            }
           
            // assume no wall hit, and hanging in air
            char.hitWallRight = false;
            char.hitWallLeft = false;
            char.inAir = true;
                   
            // find new vertical position
            var newY:Number = char.mc.y + verticalChange;
       
            // loop through all fixed objects (check vertical)
            for(var i:int=0;i<fixedObjects.length;i++) {
                //local var is faster than getting the array with index all the time
                var obj = fixedObjects[i];
                               
                //checking horizontal overlap
                if ((char.mc.x+char.width/2 > obj.leftside) && (char.mc.x-char.width/2 < obj.rightside)) {
                    //must check headbump first
                    //otherwise you would go through the ground or worse when you hit your head
                   
                    //headbump
                    if ((obj.mc is Ledge || obj.mc is LedgeL || obj.mc is LedgeC || obj.mc is LedgeR || obj.mc is wallEndB || obj.mc is DoorTop) && (char.mc.y >= obj.bottomside) && (newY - char.mc.height < obj.bottomside)){
                        newY = obj.bottomside + char.mc.height;
                        //if you hit your head in the ceiling you'll come back in the same speed.
                        char.dy = 0;
                        char.inAir = false;
                        char.newAnimState = "stand";
                        //don't break here!
                    }
                    //land
                    if ((char.mc.y <= obj.topside) && (newY > obj.topside)) {
                        hero.jumpNum=0
                        newY = obj.topside;
                        char.dy = 0;
                        char.inAir = false;
                        break;
                    }
                }
            }
           
            // find new horizontal position
            var newX:Number = char.mc.x + horizontalChange;
       
            // loop through all objects to see if character has bumped into a wall
            for(i=0;i<fixedObjects.length;i++) {
                //this thing will happen only in walls now, not in plataforms!
                if(fixedObjects[i].mc is Floor) continue;
               
                //normal things for walls ;)
                if ((newY > fixedObjects[i].topside) && (newY-char.height < fixedObjects[i].bottomside)) {
                    if ((char.mc.x-char.width/2 >= fixedObjects[i].rightside) && (newX-char.width/2 <= fixedObjects[i].rightside)) {
                        newX = fixedObjects[i].rightside+char.width/2;
                        char.hitWallLeft = true;
                        break;
                    }
                    if ((char.mc.x+char.width/2 <= fixedObjects[i].leftside) && (newX+char.width/2 >= fixedObjects[i].leftside)) {
                        newX = fixedObjects[i].leftside-char.width/2;
                        char.hitWallRight = true;
                        break;
                    }
                }
            }
           
            // set position of character
            char.mc.x = newX;
            char.mc.y = newY;
           
            // set animation state
            if (char.inAir)
            {
                newAnimState = "jump";
            }
           
            char.animstate = newAnimState;
           
            // move along walk cycle
            if (char.animstate == "walk")
            {
                char.animstep += timeDiff/60;
                if (char.animstep > char.walkAnimation.length)
                {
                    char.animstep = 0;
                }
                char.mc.gotoAndStop(char.walkAnimation[Math.floor(char.animstep)]);
               
            // not walking, show stand or jump state
            } else {
                char.mc.gotoAndStop(char.animstate);
            }
           
            // changed directions
            if (newDirection != char.direction)
            {
                char.direction = newDirection;
                char.mc.scaleX = char.direction;
            }
        }
       
        // scroll to the right or left if needed
        public function scrollWithHero()
        {
   var stagePositionRL:Number = gamelevel.x+hero.mc.x;
***var stagePositionTB:Number = gamelevel.y+hero.mc.y;
***var rightEdge:Number = stage.stageWidth-LRedgeDistance;
***var topEdge:Number =* TBedgeDistance;
***var bottomEdge:Number = gamelevel.y + TBedgeDistance;
***var leftEdge:Number = LRedgeDistance;
***
***

    if (stagePositionRL > rightEdge) { //facing right
    //gamelevel.x -= (stagePositionRL-rightEdge)*(cameraAcel/100);
    gamelevel.x -= (stagePositionRL-rightEdge)
    if (gamelevel.x <-640) gamelevel.x = -640;
    }
    if (stagePositionRL < leftEdge) { //facing left
                //gamelevel.x += (leftEdge-stagePositionRL)*(cameraAcel/100);
                gamelevel.x += (leftEdge-stagePositionRL)
                if (gamelevel.x >960) gamelevel.x = 960;
    }
***//TOP BOTTOM
***if (hero.mc.y > topEdge) {
****//gamelevel.y -= (stagePositionTB - topEdge)*(cameraAcel/100);
    gamelevel.y -= (stagePositionTB - topEdge)
***}
***if (hero.mc.y < topEdge) {
****//gamelevel.y -= (stagePositionTB - topEdge)*(cameraAcel/100);
    gamelevel.y -= (stagePositionTB - topEdge);
****
***}
***if (gamelevel.y < -300){
****gamelevel.y = -300;
***}
        }
        public function checkKeys()
        {
            //keys
        for(var i:int=keys.length-1;i>=0;i--)
            {
                if (hero.mc.hitTestObject(keys[i].mc))
                {
                        getKey(i);
                }
            }
        }
       
        // check collisions with enemies, items
        public function checkCollisions()
        {
           
            // enemies
            for(var i:int=enemies.length-1;i>=0;i--)
            {
                if (hero.mc.hitTestObject(enemies[i].mc))
                {
                   
                    // is the hero jumping down onto the enemy?
                    if (hero.inAir && (hero.dy > 0))
                    {
                        enemyDie(i);
                    } else {
                        heroDie();
                    }
                }
            }
       
           
            // items
            for(i=otherObjects.length-1;i>=0;i--)
            {
                if (hero.mc.hitTestObject(otherObjects[i]))
                {
                    getObject(i);
                }
            }
        }
       
       
        // remove enemy
        public function enemyDie(enemyNum:int)
        {
            //var pb:PointBurst = new PointBurst(gamelevel,"Uhr!",enemies[enemyNum].mc.x,enemies[enemyNum].mc.y-20);
            gamelevel.removeChild(enemies[enemyNum].mc);
            enemies.splice(enemyNum,1);
        }
       
        public function getKey(keyNum:int)
        {
            //var pb:PointBurst = new PointBurst(gamelevel,"Uhr!",enemies[enemyNum].mc.x,enemies[enemyNum].mc.y-20);
            numOfkeys++
            examineLevel();
            //gamelevel.removeChild(keys[keyNum].mc);
            gamelevel.removeChild(keys[keyNum].mc);
            keys.splice(keyNum,1);
        }
       
       
        // enemy got player
        public function heroDie()
        {
            // show dialog box
            var dialog:Dialog = new Dialog();
            dialog.x = 175;
            dialog.y = 100;
            addChild(dialog);
       
            if (playerLives == 0)
            {
                gameMode = "gameover";
                dialog.message.text = "Tilbage til bartskæreren...";
            }
           
            else
            {
                gameMode = "dead";
                dialog.message.text = "Du blev gøglet!";
                playerLives--;
            }
            hero.mc.gotoAndPlay("die");
        }
       
       
       
        // player collides with objects
        public function getObject(objectNum:int)
        {
            // award points for treasure
            if (otherObjects[objectNum] is Treasure)
            {
                var pb:PointBurst = new PointBurst(gamelevel,100,otherObjects[objectNum].x,otherObjects[objectNum].y);
                gamelevel.removeChild(otherObjects[objectNum]);
                otherObjects.splice(objectNum,1);
                addScore(100);
            }
           
            // got the key, add to inventory
            //if (otherObjects[objectNum] is Key)
            //{
                //keys = 1
                //pb = new PointBurst(gamelevel,"Nøgle!" ,otherObjects[objectNum].x,otherObjects[objectNum].y);
                //playerObjects.push("Key");
                //gamelevel.removeChild(otherObjects[objectNum]);
                //otherObjects.splice(objectNum,1);
                //examineLevel();
               
            //}
           
            // got the chest, game won
            if (otherObjects[objectNum] is Chest)
            {
                otherObjects[objectNum].gotoAndStop("open");
                gameComplete();
            }
            if (otherObjects[objectNum] is DoorBottom)
            {
               
                gamelevel.removeChild(otherObjects[objectNum]);
                otherObjects.splice(objectNum,1);
                if(numOfkeys >= 0){
                numOfkeys--
                }
                examineLevel();
            }
        }
       
]