1120:访问未定义的属性(有8个错误)

时间:2015-03-02 17:36:33

标签: javascript actionscript-3 flash actionscript flash-cc

我是一名大学生,目前在AS3上开展游戏项目

当我运行我的游戏时,我得到8个关于“1120:未定义属性的访问......”的错误。我不知道我做错了什么,所以任何人都可以帮我这个吗?

这是我的代码(是的,我知道它很长):

package  {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.utils.getTimer;


    public class PlatformGamess extends MovieClip {
        // movement constants
        static const gravity:Number=.004;

        // screen constants
        static const edgeDistance:Number=100;

        // object arrays
        private var fixedObjects:Array;
        private var otherObjects:Array;

        // hero and enemies
        private var hero:Object;
        private var enemies: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;

        // start game
        public function startPlatformGamess(){
            playerObjects=new Array();
            gameScore=0;
            gameMode="play";
            playerLives=3;
        }

        public function startGameLevel(){

            createHero();
            addEnemies();

            examineLevel();

            this.addEventListener(Event.ENTER_FRAME,gameLoop);
            stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
            stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);

            gameMode="play";
            addScore(0);
            showLives();

        }

        // creates the hero object and sets all properties
        public function createHero() {
            hero=new Object();
            hero.mc=gamelevel.hero;
            hero.inAir=false;
            hero.direction=1;
            hero.animstate="stand";
            hero.walkAnimation=new Array(2)
            hero.animstep=0;
            hero.jump=false;
            hero.moveLeft=false;
            hero.moveRight=false;
            hero.jumpSpeed=.8;
            hero.walkSpeed=.15;
            hero.width=20.0;
            hero.height=40.0;
            hero.startx=hero.mc.x;
            hero.starty=hero.mc.y;
        }

        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);
                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 examineLevel(){
            fixedObjects=new Array();
            otherObject=new Array();
            for (var i:int=0;i<this.gamelevel.numChildren;i++) {
                var mc=this.gamelevel.getChildAt(i);

                if ((mc is Floor) || (mc is Wall)) {
                    var floorObjects: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);

                } else if ((mc is Treasure) || (mc is Key) ||
                                (mc is Door) || (mc is Chest)) {
                                    otherObjects.push(mc);
                }
            }
        }

        public function keyDownFunction(event:KeyboardEvent) {
            if (gamemode != "play") return; // don't move until in play mode

            if (event.keyCode==37){
                hero.moveLeft=true;
            } else if (event.keyCode==39) {
                hero.moveRight==true;
            } else if (event.keyCode==32){
                if (!hero.inAir){
                    hero.jump=true;
                }
            }
        }

        public function keyUpFunction(event:KeyboardEvent) {
            if (event.keyCode == 37) {
                hero.moveLeft = false;
            } else if (event.keyCode == 39) {
                hero.moveRight = false;
            }
        }

        public function gameLoop(event:Event) {     
            if (lastTime==0)lastTime=getTimer();
            var timeDiff:int=getTimer()-lastTime;
            lastTime+=timeDiff;

            if (gameMode=="play"){
                moveCharacter(hero,timeDiff);
                moveEnemies(timeDiff);
                checkCollisions();
                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;
                }
            }
        }

        public function moveCharacter(char:Object,timeDiff:Number) {
            if (timeDiff < 1) return;

            var verticalChange:Number=char.dy*timeDiff+timeDiff*gravity;
            if (verticalChange>15.0) verticalChange=15.0;
            char.dy+=timeDiff*gravity;


            var horizontalChange=0;
            var newAnimState:String="stand";
            var newDirection:int=char.direction;
            if (char.moveLeft){
                // wa
                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 to see if character has landed
            for(var i:int=0;i<fixedObjects.length;i++) {
                if ((char.mc.x+char.width/2 > fixedObjects[i].leftside) && (char.mc.x-char.width/2 < fixedObjects[i].rightside)) {
                    if ((char.mc.y <= fixedObjects[i].topside) && (newY > fixedObjects[i].topside)) {
                        newY = fixedObjects[i].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++) {
                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;
            }
        }

        public function scrollWithHero(){
            var stagePosition:Number = gamelevel.x+hero.mc.x;
            var rightEdge:Number = stage.stageWidth-edgeDistance;
            var leftEdge:Number = edgeDistance;
            if (stagePosition > rightEdge){
                gamelevel.x -= (stagePosition-rightEdge);
                if (gamelevel.x < -(gamelevel.width-stage.stageWidth)) gamelevel.x = -(gamelevel.width-stage.stageWidth);
            }
            if (stagePosition < leftEdge){
                gamelevel.x += (leftEdge-stagePosition);
                if (gamelevel.x > 0)gamelevel.x=0;
            }
        }

        public function checkCollisions(){

            // enemies
            for(var i:int=enemies.length-1;i>=0;i--){
                if (hero.mc.hitTestObject(enemies[i].mc)){


                    if (hero.inAir && (hero.dy>0)){
                        enemyDie(i);
                    } else {
                        heroDie();
                    }
                }
            }

            for(i=otherObjects.length-1;i>=0;i--) {
                if (hero.mc.hitTestObject(otherObjects[i])) {
                    getObject(i);
                }
            }
        }

        public function enemyDie(enemyNum:int) {
            var pb:PointBurst = new PointBurst(gamelevel,"Zetsu Extinct!",enemies[enemyNum].mc.x,enemies[enemyNum].mc.y-20);
            gamelevel.removeChild(enemies[enemyNum].mc);
            enemies.splice(enemyNum,1);
        }

        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 = "Game Over!";
            } else {
                gameMode = "dead";
                dialog.message.text = "Yoi Failed...";
                playerLives--;
            }

            hero.mc.gotoAndPlay("die");
        }

        public function getObject(objectNum:int) {
            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);


            } else if (otherObjects[objectNum] is Key) {
                pb = new PointBurst(gamelevel,"Got Key!" ,otherObjects[objectNum].x,otherObjects[objectNum].y);
                playerObjects.push("Key");
                gamelevel.removeChild(otherObjects[objectNum]);
                otherObjects.splice(objectNum,1);


            } else if (otherObjects[objectNum] is Door) {
                if (playerObjects.indexOf("Key") == -1) return;
                if (otherObjects[objectNum].currentFrame == 1) {
                    otherObjects[objectNum].gotoAndPlay("open");
                    levelComplete();
                }


            } else if (otherObjects[objectNum] is Chest) {
                otherObjects[objectNum].gotoAndStop("open");
                gameComplete();
            }

        }

        public function addScore(numPoints:int) {
            gameScore += numPoints;
            scoreDisplay.text = String(gameScore);
        }

        // update player lives
        public function showLives() {
            livesDisplay.text = String(playerLives);
        }

        // level over, bring up dialog
        public function levelComplete() {
            gameMode = "done";
            var dialog:Dialog = new Dialog();
            dialog.x = 175;
            dialog.y = 100;
            addChild(dialog);
            dialog.message.text = "Level Complete!";
        }

        public function gameComplete() {
            gameMode = "gameover";
            var dialog:Dialog = new Dialog();
            dialog.x = 175;
            dialog.y = 100;
            addChild(dialog);
            dialog.message.text = "You Got the Treasure!";
        }

            public function clickDialogButton(event:MouseEvent) {
            removeChild(MovieClip(event.currentTarget.parent));

            // new life, restart, or go to next level
            if (gameMode == "dead") {
                // reset hero
                showLives();
                hero.mc.x = hero.startx;
                hero.mc.y = hero.starty;
                gameMode = "play";
            } else if (gameMode == "gameover") {
                cleanUp();
                gotoAndStop("start");
            } else if (gameMode == "done") {
                cleanUp();
                nextFrame();
            }

            // give stage back the keyboard focus
            stage.focus = stage;
        }           

        // clean up game
        public function cleanUp() {
            removeChild(gamelevel);
            this.removeEventListener(Event.ENTER_FRAME,gameLoop);
            stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
            stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
        }

    }
}

以下是编码中的错误列表:

*第103行,第4列1120:访问未定义的属性otherObject。

*第109行,第6列1120:访问未定义的属性floorObject。

*第110行,第6列1120:访问未定义的属性floorObject。

*第111行,第6列1120:访问未定义的属性floorObject。

*第112行,第6列1120:访问未定义的属性floorObject。

*第113行,第6列1120:访问未定义的属性floorObject。

*第114行,第24栏1120:访问未定义的属性floorObject。

*第124行,第8列1120:访问未定义的属性游戏模式。

可以请有人帮助我,我一直在摸不着它

感谢

1 个答案:

答案 0 :(得分:0)

您的代码中存在拼写错误。
ActionScript 区分大小写,并且变量需要拼写正确!

第103行:将otherObject=new Array();更改为otherObjects=new Array();

第108行:将var floorObjects:Object=new Object();更改为var floorObject:Object=new Object();

第124行:将if (gamemode != "play")更改为if (gameMode != "play")