Actionscript3 ArgumentError:错误#2109:

Actionscript3 ArgumentError:错误#2109:,actionscript,platform,Actionscript,Platform,以Gary Rosenzweig的游戏为基础,在actionscript 3中制作一个基于触摸的平台游戏,直到今天一切都进行得很顺利,我一直在尝试在不改变actionscript大部分内容的情况下交换地板对象等,我有以下错误 ArgumentError:错误#2109:在场景跳转中未找到帧标签跳转。 在flash.display::MovieClip/gotoAndStop() 在PlatformGame/moveCharacter()[C:\Users\Michael\Desktop\Plat

以Gary Rosenzweig的游戏为基础,在actionscript 3中制作一个基于触摸的平台游戏,直到今天一切都进行得很顺利,我一直在尝试在不改变actionscript大部分内容的情况下交换地板对象等,我有以下错误

ArgumentError:错误#2109:在场景跳转中未找到帧标签跳转。 在flash.display::MovieClip/gotoAndStop() 在PlatformGame/moveCharacter()[C:\Users\Michael\Desktop\PlatformGame\PlatformGame.as:418] 在PlatformGame/MoveForests()[C:\Users\Michael\Desktop\PlatformGame\PlatformGame.as:314] 在PlatformGame/gameLoop()[C:\Users\Michael\Desktop\PlatformGame\PlatformGame.as:303]

这似乎也会导致碰撞检测出现问题

代码如下。(我没有更改原始场景或标签名称,但仍显示错误)

包{
导入flash.display.*;
导入flash.events.*;
导入flash.text.*;
导入flash.utils.getTimer;
导入flash.ui.multi-touch;
导入flash.ui.multi-touchinputmode;
公共类平台游戏扩展MovieClip{
//运动常数
静态常量重力:数字=.004;
//屏幕常数
静态常数边界:数字=100;
公共var右按钮:SimpleButton;
//对象数组
私有变量fixedObjects:数组;
私有对象:数组;
//英雄与敌人
私人英雄:客体;
私人敌人:阵列;
//游戏状态
私有变量playerObject:数组;
个人分数:int;
private var gameMode:String=“start”;
私人玩家生活:int;
私有var lastTime:编号=0;
//开始比赛
公共函数startPlatformGame(){
playerObjects=新数组();
游戏分数=0;
gameMode=“play”;
playerLives=3;
}
//起始水平
公共功能startGameLevel(){
//创造人物
createHero();
加法器();
//检查标高并记录所有对象
检查级别();
//添加侦听器
此.addEventListener(事件.输入\u帧,gameLoop);
Multitouch.inputMode=MultitouchInputMode.TOUCH\u点;
游戏级别[“rButton”]。添加EventListener(TouchEvent.TOUCH_BEGIN,touchRight);
游戏级别[“rButton”]。添加EventListener(TouchEvent.TOUCH_END,touchRightReleased);
游戏级别[“lButton”]。添加EventListener(TouchEvent.TOUCH_BEGIN,touchLeft);
游戏级别[“lButton”]。添加EventListener(TouchEvent.TOUCH_END,touchLeftReleased);
游戏级别[“jButton”]。添加EventListener(TouchEvent.TOUCH_BEGIN,jump);
游戏级[“jButton”]。添加EventListener(TouchEvent.TOUCH_END,jumpReleased);
跟踪(“hi”+游戏级别[“rButton”]);
//设置游戏状态
gameMode=“play”;
addScore(0);
showlifes();
}
//起始水平
公共功能startGameLevelHarder(){
//创造人物
createHero();
addemies();
//检查标高并记录所有对象
检查级别();
//设置游戏状态
gameMode=“play”;
addScore(0);
showlifes();
}
//起始水平
公共功能startgamelevelopment(){
//创造人物
createHero();
添加最顽固的敌人();
//检查标高并记录所有对象
检查级别();
//设置游戏状态
gameMode=“play”;
addScore(0);
showlifes();
}
//创建英雄对象并设置所有属性
公共函数createHero(){
hero=新对象();
hero.mc=gamelevel.hero;
hero.dx=0.0;
hero.dy=0.0;
hero.inAir=false;
hero.direction=0;
hero.animstate=“站立”;
hero.walkAnimation=新数组(2,3,4,5,6,7,8);
hero.animstep=0;
hero.jump=false;
hero.moveLeft=false;
hero.moveRight=错误;
hero.jumpSpeed=.8;
hero.walkSpeed=.15;
hero.width=15.0;
hero.height=35.0;
hero.startx=hero.mc.x;
hero.starty=hero.mc.y;
}
//查找关卡中的所有敌人,并为每个敌人创建一个对象
公共功能附录(){
敌人=新阵列();
变量i:int=1;
while(true){
如果(游戏等级[“敌人”+i]==null)中断;
var敌人=新对象();
敌方.mc=游戏级别[“敌方”+i];
d.dx=0.0;
d.dy=0.0;
敌方.inAir=错误;
敌方方向=1;
敌方.animstate=“立场”
敌方.walkAnimation=新阵列(2,3,4,5);
敌方.animstep=0;
敌人.跳跃=错误;
敌方:正确=正确;
敌人。左=假;
敌方.跳跃速度=1.0;
敌方步行速度=0.08;
宽度=30.0;
高度=30.0;
敌人。推(敌人);
i++;
}
}
//查找关卡中的所有敌人,并为每个敌人创建一个对象
公共职能部门(EMIES){
敌人=新阵列();
变量i:int=1;
while(true){
如果(游戏等级[“敌人”+i]==null)中断;
var敌人=新对象();
敌方.mc=游戏级别[“敌方”+i];
d.dx=0.0;
d.dy=0.0;
敌方.inAir=错误;
敌方方向=1;
敌人。
package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.utils.getTimer;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;

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

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

        public var rightButton:SimpleButton;

        // 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 startPlatformGame() {
            playerObjects = new Array();
            gameScore = 0;
            gameMode = "play";
            playerLives = 3;
        }


        // start level
        public function startGameLevel() {

            // create characters
            createHero();
            addEnemies();

            // examine level and note all objects
            examineLevel();

            // add listeners
            this.addEventListener(Event.ENTER_FRAME,gameLoop);
            Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
            gamelevel["rButton"].addEventListener(TouchEvent.TOUCH_BEGIN,touchRight);
            gamelevel["rButton"].addEventListener(TouchEvent.TOUCH_END,touchRightReleased);
            gamelevel["lButton"].addEventListener(TouchEvent.TOUCH_BEGIN,touchLeft);
            gamelevel["lButton"].addEventListener(TouchEvent.TOUCH_END,touchLeftReleased);
            gamelevel["jButton"].addEventListener(TouchEvent.TOUCH_BEGIN,jump);
            gamelevel["jButton"].addEventListener(TouchEvent.TOUCH_END,jumpReleased);


            trace("hi"+gamelevel["rButton"]);

            // set game state
            gameMode = "play";
            addScore(0);
            showLives();
        }



        // start level
        public function startGameLevelHarder() {

            // create characters
            createHero();
            addHardEnemies();

            // examine level and note all objects
            examineLevel();


            // set game state
            gameMode = "play";
            addScore(0);
            showLives();
        }

        // start level
        public function startGameLevelHardest() {

            // create characters
            createHero();
            addHardestEnemies();

            // examine level and note all objects
            examineLevel();


            // 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.direction = 0;
            hero.animstate = "stand";
            hero.walkAnimation = new Array(2,3,4,5,6,7,8);
            hero.animstep = 0;
            hero.jump = false;
            hero.moveLeft = false;
            hero.moveRight = false;
            hero.jumpSpeed = .8;
            hero.walkSpeed = .15;
            hero.width = 15.0;
            hero.height = 35.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++;
            }
        }

        // finds all enemies in the level and creates an object for each
        public function addHardEnemies() {
            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 = .15;
                enemy.width = 56.0;
                enemy.height = 80.0;
                enemies.push(enemy);
                i++;
            }
        }


        // finds all enemies in the level and creates an object for each
        public function addHardestEnemies() {
            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 = .25;
                enemy.width = 40.0;
                enemy.height = 40.0;
                enemies.push(enemy);
                i++;
            }
        }

        // 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 ground1) || (mc is wall1) || (mc is ledge1) || (mc is ledge2) || (mc is rock) ||(mc is rocktip)) {
                    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 Key) || (mc is Door) || (mc is Chest)) {
                    otherObjects.push(mc);
                }
            }
        }


        // note key presses, set hero properties
        public function touchRight(event:TouchEvent) {
            trace("touchRight");
            hero.moveRight = true;
        }

        public function touchRightReleased(event:TouchEvent) {
            hero.moveRight = false;
        }
        public function touchLeft(event:TouchEvent) {
            hero.moveLeft = true;
        }

        public function touchLeftReleased(event:TouchEvent) {
            hero.moveLeft = false;
        }

        public function jump(event:TouchEvent) {
            if (!hero.inAir) {
                    hero.jump = true;
                }
        }

        public function jumpReleased(event:TouchEvent) {
            if (!hero.inAir) {
                    hero.jump = false;
                }
        }
        // note key presses, set hero properties
        //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;
            //}
        //}

        // perform all game tasks
        public function gameLoop(event:Event) {

            // 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();
                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 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 = "";
            }
            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*1.35;
            }
        }

        // scroll to the right or left if needed
        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);
                gamelevel["rButton"].x += (stagePosition-rightEdge);
                gamelevel["lButton"].x += (stagePosition-rightEdge);
                gamelevel["jButton"].x += (stagePosition-rightEdge);
                if (gamelevel.x < -(gamelevel.width-stage.stageWidth)) gamelevel.x = -(gamelevel.width-stage.stageWidth);
            }
            if (stagePosition < leftEdge) {
                gamelevel.x += (leftEdge-stagePosition);
                gamelevel["rButton"].x -= (leftEdge-stagePosition);
                gamelevel["lButton"].x -= (leftEdge-stagePosition);
                gamelevel["jButton"].x -= (leftEdge-stagePosition);
                if (gamelevel.x > 0) gamelevel.x = 0;
            }
        }

        // 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,"Got Em!",enemies[enemyNum].mc.x,enemies[enemyNum].mc.y-20);
            gamelevel.removeChild(enemies[enemyNum].mc);
            enemies.splice(enemyNum,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 = "Game Over!";
            } else {
                gameMode = "dead";
                dialog.message.text = "He Got You!";
                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
            } 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);

            // hit the door, end level if hero has the key
            } else if (otherObjects[objectNum] is Door) {
                if (playerObjects.indexOf("Key") == -1) return;
                if (otherObjects[objectNum].currentFrame == 1) {
                    otherObjects[objectNum].gotoAndPlay("open");
                    levelComplete();
                }

            // got the chest, game won
            } else if (otherObjects[objectNum] is Chest) {
                otherObjects[objectNum].gotoAndStop("open");
                gameComplete();
            }

        }

        // add points to score
        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!";
        }

        // game over, bring up dialog
        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!";
        }

        // dialog button clicked
        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);
        }       


    }



}
char.mc.gotoAndStop(char.animstate);