单击按钮时Flash Flash-Start游戏

时间:2017-08-23 13:23:49

标签: actionscript-3 flash animation flash-cs6

您好我是第一次尝试学习Actionscript。我正在尝试像Flappy Bird这样的游戏。现在我的游戏工作正常,没有开始菜单。但是现在我在开始按钮后无法开始游戏。 我收到一个错误:

  

1046:未找到类型或不是编译时常量:BtnPlay。

但是我创建了一个名为' BtnPlay'的按钮的实例。并且还与Actionscript相关联。

这是我的TimeLine enter image description here

我正在使用外部脚本来控制游戏。

我想要的是 -

  1. 点击开始按钮后开始游戏。
  2. 点击后隐藏按钮。
  3. 在游戏结束时再次显示按钮并隐藏游戏角色(鸟)。
  4. 我的行动也在下面给出。

        package{
    import flash.display.MovieClip;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.events.Event; //used for ENTER_FRAME event
    
    public class Main extends MovieClip{
    
        //constants
        const gravity:Number = 1.5;            //gravity of the game
        const dist_btw_obstacles:Number = 300; //distance between two obstacles
        const ob_speed:Number = 8;             //speed of the obstacle
        const jump_force:Number = 15;          //force with which it jumps
    
        //variables
        var player:Player = new Player();      
        var lastob:Obstacle = new Obstacle();  //varible to store the last obstacle in the obstacle array
        var obstacles:Array = new Array();     //an array to store all the obstacles
        var yspeed:Number = 0;                 //A variable representing the vertical speed of the bird
        var score:Number = 0;                  //A variable representing the score
    
        public function Main(){
            init();
        }
    
        function init():void {
            //initialize all the variables
            player = new Player();
            lastob = new Obstacle();
            obstacles = new Array();
            yspeed = 0;
            score = 0;
    
            //add player to center of the stage the stage
            player.x = stage.stageWidth/2;
            player.y = stage.stageHeight/2;
            addChild(player);
    
            //create 3 obstacles ()
            createObstacle();
            createObstacle();
            createObstacle();
    
            //Add EnterFrame EventListeners (which is called every frame) and KeyBoard EventListeners
            addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
            stage.addEventListener(KeyboardEvent.KEY_UP, key_up);
        }
    
        private function key_up(event:KeyboardEvent){
            if(event.keyCode == Keyboard.SPACE){
                //If space is pressed then make the bird
                yspeed = -jump_force;
            }
        }
    
        function restart(){
            if(contains(player))
                removeChild(player);
                for(var i:int = 0; i < obstacles.length; ++i){
                    if(contains(obstacles[i]) && obstacles[i] != null)
                    removeChild(obstacles[i]);
                    obstacles[i] = null;
                }
                obstacles.slice(0);
                init();
        }
    
        function onEnterFrameHandler(event:Event){
            //update player
            yspeed += gravity;
            player.y += yspeed;
    
            //restart if the player touches the ground
            if(player.y + player.height/2 > stage.stageHeight){
                restart();
            }
    
            //Don't allow the bird to go above the screen
            if(player.y - player.height/2 < 0){
                player.y = player.height/2;
            }
    
            //update obstacles
            for(var i:int = 0;i<obstacles.length;++i){
                updateObstacle(i);
            }
    
            //display the score
            scoretxt.text = String(score);
        }
    
        //This functions update the obstacle
        function updateObstacle(i:int){
            var ob:Obstacle = obstacles[i];
    
            if(ob == null)
            return;
            ob.x -= ob_speed;
    
            if(ob.x < -ob.width){
                //if an obstacle reaches left of the stage then change its position to the back of the last obstacle
                changeObstacle(ob);
            }
    
            //If the bird hits an obstacle then restart the game
            if(ob.hitTestPoint(player.x + player.width/2,player.y + player.height/2,true)
               || ob.hitTestPoint(player.x + player.width/2,player.y - player.height/2,true)
               || ob.hitTestPoint(player.x - player.width/2,player.y + player.height/2,true)
               || ob.hitTestPoint(player.x - player.width/2,player.y - player.height/2,true)){
                restart();
            }
    
            //If the bird got through the obstacle without hitting it then increase the score
            if((player.x - player.width/2 > ob.x + ob.width/2) && !ob.covered){
                ++score;
                ob.covered = true;
            }
        }
    
        //This function changes the position of the obstacle such that it will be the last obstacle and it also randomizes its y position
        function changeObstacle(ob:Obstacle){
            ob.x = lastob.x + dist_btw_obstacles;
            ob.y = 100+Math.random()*(stage.stageHeight-200);
            lastob = ob;
            ob.covered = false;
        }
    
        //this function creates an obstacle
        function createObstacle(){
            var ob:Obstacle = new Obstacle();
            if(lastob.x == 0)
            ob.x = 800;
            else
            ob.x = lastob.x + dist_btw_obstacles;
            ob.y = 100+Math.random()*(stage.stageHeight-200);
            addChild(ob);
            obstacles.push(ob);
            lastob = ob;
        }
    
    
    }
    

    }

    如果有任何错误,我道歉。我对动作全新。任何帮助表示赞赏。谢谢

1 个答案:

答案 0 :(得分:1)

请看这个示例设置(请参阅它可以帮助您):

package{

import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.Event; //used for ENTER_FRAME event

public class Main extends MovieClip{

    //variables

    var btnPlay:BtnPlay = new BtnPlay(); //Var name must be different from Class name

    //These don't need "new" until when used (initialized)
    var player:Player; var lastob:Obstacle; var obstacles:Array;


    public function Main()
    {
        if (stage) { init(); } //# Check if Stage is ready
        else { addEventListener(Event.ADDED_TO_STAGE, init); }

    }

    public function init():void 
    {
        btnPlay.x = stage.stageWidth/4; //testing position
        btnPlay.y = stage.stageHeight/4; //testing position
        addChild(btnPlay); //now add button to Stage
        btnPlay.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler)‌​;
    }

    public function mouseUpHandler(evt:MouseEvent):void 
    {
        btnPlay.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler)‌​;
        btnPlay.visible = false; //hide button from system
        initGame(); //add characters etc

        ////# Use "MovieClip(this.root)." to control existing Stage items that were not added by code
        //gotoAndPlay(2); //why go to frame 2 now?
        MovieClip(this.root).gotoAndStop(2); //or try: MovieClip(root).gotoAndStop(2);

    }

    function initGame():void 
    {
        //initialize all the variables
        player = new Player();
        lastob = new Obstacle();
        obstacles = new Array();

        yspeed = score = 0;

        //add player to center of the stage the stage
        player.x = stage.stageWidth/2;
        player.y = stage.stageHeight/2;
        addChild(player);

        //create 3 obstacles ()
        for(var i:int = 1; i <= 3; i++) { createObstacle(); }

        //Add EnterFrame EventListeners (which is called every frame) and KeyBoard EventListeners
        addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
        stage.addEventListener(KeyboardEvent.KEY_UP, key_up);
    }

    function restart()
    {
        //# reset object positions for new game instead making "new" instances of same thing (each adds to memory usage)

        if( MovieClip(this.root).contains(player) )
        {
            //removeChild(player); //why remove fom Stage but then re-create and re-add more in memory?

            player.x = stage.stageWidth/2; player.y = stage.stageHeight/2; //reset starting position
            score = yspeed = 0; //reset values to zero
            btnPlay.visible = true; //show Play button

            for(var i:int = 0; i < obstacles.length; ++i)
            {
                if(contains(obstacles[i]) && obstacles[i] != null)
                removeChild(obstacles[i]);
                obstacles[i] = null;
            }
            obstacles.slice(0);

            //create 3 obstacles
            for(var i:int = 1; i <= 3; i++) { createObstacle(); }

            //init(); //you already created first time, just re-use not create more new ones.
        }
    }

} //end Class

} //end Package