PHP User Warning: fetch_template() calls should be replaced by the vB_Template class. Template name: bbcode_highlight in ..../includes/functions.php on line 4197
Been looking at this way too long today, please help :)
A Flash Developer Resource Site

Results 1 to 2 of 2

Thread: Been looking at this way too long today, please help :)

  1. #1
    Junior Member
    Join Date
    Jun 2004
    Posts
    7

    Been looking at this way too long today, please help :)

    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();
                }
            }
           
    ]

  2. #2
    Mod cancerinform's Avatar
    Join Date
    Mar 2002
    Location
    press the picture...
    Posts
    13,448
    To avoid the error just add this line before:

    If(hero.mc.hitTestObject != null)
    {
    ......
    - The right of the People to create Flash movies shall not be infringed. -
    | www.Flashscript.biz | Flashscript Biz Classes/Components |

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center