重启后游戏加速

时间:2014-06-13 14:01:53

标签: actionscript-3 application-restart

所以我有一大堆flash,actionscript3代码,可以作为一个flappybird /射击游戏。 问题是我在代码的最底部做了一个重启按钮,但每次我点击重启按钮,游戏都会自动加速。 所以我所做的所有管道都移动了两倍,等等。 每次使用重启按钮重启游戏时都会发生这种情况。

对不起真的很长的代码,这是为了学校而且想到也许你们中的一个人可以帮助我解决为什么每次我点击de afbutton时它都会保持更快的速度。

不介意评论顺便说一下,它是荷兰语。

这是代码

package

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.events.KeyboardEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;


public class algemeClass extends MovieClip
{
    //Hier maak ik alle variablen aan.
    var speed:Number;
    var fishVel:Number = 0;
    var Gravity:Number = 0.75;
    var score:int = 0;
    var bestscore:int = 0;

    //Hier alle Booleans
    var End:Boolean = false;
    var Pause:Boolean = true;

    //Hier alles voor addChild.
    var Fish = new myFish ();
    var Pipe = new pipe ();
    var Pipe1 = new pipe ();
    var Pipe2 = new pipe ();
    var Pipe3 = new pipe ();
    var Pipe4 = new pipe ();
    var Pipe5 = new pipe ();
    var Pipe6 = new pipe ();
    var Pipe7 = new pipe ();
    var bubble1 = new bubble ();
    var bubble2 = new bubble ();
    var bubble3 = new bubble ();
    var bubble4 = new bubble();
    var haaienLijn = new haaienlijn ();
    var scorelijn = new scoreLijn ();
    public var afbutton = new afButton ();

    //Hier mijn array voor het schieten van de bullets.
    var Bullets:Array = new Array ();
    var Bullets2:Array = new Array();
    var Bullets3:Array = new Array ();
    var Bullets4:Array = new Array ();
    var Enemies:Array = new Array ();

    //Hier komen alle Timers
    var AddEnemyTimer:Timer = new Timer(3000);
    //Hier alle Numbers/Integres.
    public var startbutton =new startButton();

    //Variable met random getal
    var random1:int = Math.random() * 15;
    var random2:int = Math.random() * 15;
    var random3:int = Math.random() * 15;
    var random4:int = Math.random() * 15;




    //CONSTRUCTOR





    /*Dit wordt meteen afgespeeld als het spel gestart wordt.
    Ik wou hier graag dat er een start knop komt waarna het spel begint */
    public function algemeClass()
    {
        //Hier wordt een startknop aangemaakt.
        addChild(startbutton);

        //Hier wordt de positie van de startknop bepaalt.
        startbutton.x = 275;
        startbutton.y = 200;

        //Hier voeg ik een eventlistener toe om te luisteren wanneer er op de startbutton wordt geklikt
        addEventListener(MouseEvent.CLICK,startGame);

        //Dit is de functie voor de hierboven genoemde listener.
        function startGame(event:MouseEvent)
        {
            //als deze functie wordt uitgevoerd. zullen de volgende dingen gebeuren.
            //het spel de game wordt gestart.
            theGames();

            //De eventlistener die naar de startknop luisterd wordt verwijderd
            removeEventListener(MouseEvent.CLICK,startGame);

            //hier wordt de startknop van de stage verwijdert
            if (startbutton.parent)
            {
                startbutton.parent.removeChild(startbutton);
            }
        }
    }




    //DE HEADFUNCTION




    function theGames()
    {




        //EVERY ADDCHILDS





        addChild(Pipe);
        addChild(Pipe1);
        addChild(Pipe2);
        addChild(Pipe3);
        addChild(Pipe4);
        addChild(Pipe5);
        addChild(Pipe6);
        addChild(Pipe7);
        addChild(scorelijn);
        addChild(bubble1);
        addChild(bubble2);
        addChild(bubble3);
        addChild(bubble4);
        addChild(Fish);
        addChild(haaienLijn);





        //EVERY POSITION






        //Dit is de eerste pijp en die begint buiten het scherm.
        Pipe.x = 550;

        /*De Y van deze pijp wordt bepaalt door een random getal.
        Dit getal wordt bepaalt door de maximale Y positie te nemen die pijp mag zijn
        en er dan een random getal tussen 0 en 10*245 bij op te tellen.
        Zo kunnen de pijpen van bijna helemaal boven naar bijna helemaal onderaan gaan.*/
        Pipe.y = (330 - (Math.floor(Math.random()*330)));

        /* hier wordt gezegd dat de tegenhanger van pijp een waar je tussendoormoet dezelfde
        Y als pijp 1 heeft alleen dan -800 waardoor het gat ontstaat*/
        Pipe1.y = Pipe.y + 800;

        //Zie voor pijp en pijp1
        Pipe2.y = (330 - (Math.floor(Math.random()*330)));
        Pipe2.x = Pipe.x + 250;

        //Zie voor pijp en pijp1
        Pipe3.y = Pipe2.y + 800;

        //Zie voor pijp en pijp1
        Pipe4.y = (330 - (Math.floor(Math.random()*330)));
        Pipe4.x = Pipe.x + 500;

        //Zie voor pijp en pijp1
        Pipe5.y = Pipe4.y + 800;

        //Zie voor pijp en pijp1
        Pipe6.y = (330 - (Math.floor(Math.random()*330)));
        Pipe6.x = Pipe.x + 750;

        //Zie voor pijp en pijp1
        Pipe7.y = Pipe6.y + 800;

        /* dit is de scorelijn waar je een punt krijgt als je erdoorheen vliegt
        deze heeft een standaar X en Y positie alleen beweegt wel*/
        scorelijn.y = 200;
        scorelijn.x = 550;

        bubble1.x = Math.random() * 550;
        bubble1.y = 620;

        //Zie bubble1
        bubble2.x = Math.random() * 550;
        bubble2.y = 620;

        //Zie bubble1
        bubble3.x = Math.random() * 550;
        bubble3.y = 620;

        //Zie bubble1
        bubble4.x = Math.random() * 550;
        bubble4.y = 620;

        //startpositie van de vis
        Fish.x = 200;
        Fish.y = 200;

        haaienLijn.x = -50;
        haaienLijn.y = 300;

        score_txt.text = score.toString();

        afbutton.x = 275;
        afbutton.y = 200;







        //EVERY EVENTLISTENER







        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);

        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler2);

        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler3);

        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler4);

        stage.addEventListener(MouseEvent.MOUSE_DOWN,fishSwim);

        addEventListener(Event.ENTER_FRAME,Main);

        AddEnemyTimer.addEventListener(TimerEvent.TIMER, addEnemy);

        afbutton.addEventListener(MouseEvent.CLICK,onAfButton);





        //THE MAIN FUNCTIE





        function Main(event:Event):void
        {
            bubbleMove();
            pipeMove();
            scoreSchrijf();
            Oneindig();
            Jump();
            Shooting();
            Shooting2();
            Shooting3();
            Shooting4();
            moveEnemies();
            checkCollisions();
            checkCollisions2();
            checkCollisions3();
            checkCollisions4();
            checkCollisions5();
            checkcollisions6();
            Af();
        }




        //FUNCTION BUBBLEMOVE






        //In dit gedeelte zal alles van de bubbles bepaalt worden.
        function bubbleMove():void
        {
            /* De Y posities van de bubbles worden bepaalt door eerst te zeggen welke y de bubbles hebben
            hierna zeg ik dat de nieuwe Y van de bubbles moet worden bepaalt door de hele tijd het random
            gegenereerde getal van hierboven er van aftehalen waardoor de bubbel naar boven gaat*/
            bubble1.y = bubble1.y - random1;

            bubble2.y = bubble2.y - random2;

            bubble3.y = bubble3.y - random3;

            bubble4.y = bubble4.y - random4;


            /*In dit stuk code wordt gezegd dat als de bubbel boven het scherm komt hij een nieuwe Y snelheid 
            zoals hier boven onderaan het scherm wordt geplaatst en een nieuwe random X Positie*/
            if (bubble1.y < 0)
            {
                bubble1.x = Math.random() * 550;
                bubble1.y = 620;
            }

            if (bubble2.y < 0)
            {
                bubble2.x = Math.random() * 550;
                bubble2.y = 620;
            }

            if (bubble3.y < 0)
            {
                bubble3.x = Math.random() * 550;
                bubble3.y = 620;
            }

            if (bubble4.y < 0)
            {
                bubble4.x = Math.random() * 550;
                bubble4.y = 620;
            }
        }





        //FUNCTION PIPEMOVE





        /* bij deze eventlistener zullen alle pijpen en scorelijnen gaan bewegen*/
        function pipeMove():void
        {
            //De standaard snelheid van alle onderdelen is -4
            Pipe.x = Pipe.x - 4;

            //alle tegenhagende pijpen krijgen de zelfde X als de tegenhanger.
            Pipe1.x = Pipe.x;

            Pipe2.x = Pipe2.x - 4;

            Pipe3.x = Pipe2.x;

            Pipe4.x = Pipe4.x - 4;

            Pipe5.x = Pipe4.x;

            Pipe6.x = Pipe6.x - 4;

            Pipe7.x = Pipe6.x;

            scorelijn.x = scorelijn.x - 4;
        }





        //FUNCTION SCORESCHIJF





        //Hier zal worden bepaalt of er sprake is van een score
        function scoreSchrijf():void
        {
            /* Hier wordt gezegd dat als de vis met object in aanraking komt er +1 bij de score moet komen
            nadat dat is gebeurt moet de X van de lijn naar 275 naar links gaan
            DIt getal 275 is het getal tussen de buizen. Dus elke keer als je door de lijn gaat
            zal de lijn naar de volgende buis gaan en kun je hier ook scoren.*/
            if (Fish.hitTestObject(scorelijn))
            {
                score = score + 1;
                scorelijn.x = scorelijn.x + 250;
            }

            //Hier wordt de score omgezet voor het textvak en daar weergegeven
            score_txt.text = score.toString();
        }






        //FUNCTION PIJPEN BLIJVEN GAAN





        //Deze wordt toegevoegd om ervoor te zorgen dat alles door blijft gaan.
        function Oneindig():void
        {
            /*er wordt hier gezegd dat als de pijp buiten het scherm verdwijnt hij weer een nieuwe
            random Y positie moet krijgen en dat de tegenhangende pijp weer het gat moet maken.
            De X positie van de buis wordt bepaalt door hem +275 achter de laatste buis te plaatsen
            hierdoor zal hij de hele tijd terugkomen aangezien dit met elke buis gebeurd.
            dus als buis 0/1 buiten het scherm gaan komen ze 275 achter 6/7
            als 2/3 buiten het scherm komt komt hij achter de pijp 0/1, ze komen dan dus de hele tijd
            achter hun voorganger aan.*/

            if (Pipe.x <= -100)
            {
                Pipe.y = (330 - (Math.floor(Math.random()*330)));
                Pipe.x = Pipe6.x + 250;
                Pipe1.y = Pipe.y + 800;
            }

            if (Pipe2.x <= -100)
            {
                Pipe2.y = (330 - (Math.floor(Math.random()*330)));
                Pipe2.x = Pipe.x + 250;
                Pipe3.y = Pipe2.y + 800;
            }

            if (Pipe4.x <= -100)
            {
                Pipe4.y = (330 - (Math.floor(Math.random()*330)));
                Pipe4.x = Pipe2.x + 250;
                Pipe5.y = Pipe4.y + 800;
            }

            if (Pipe6.x <= -100)
            {
                Pipe6.y = (330 - (Math.floor(Math.random()*330)));
                Pipe6.x = Pipe4.x + 250;
                Pipe7.y = Pipe6.y + 800;
            }
        }





        //FUNCTION JUMPEN






        //hier wordt de gravity voor de vis bepaalt
        function Jump():void
        {
            //hier wordt gezegd dat de Y van de vis de hele tijd + fishVel (fishvelocity) gaat en dit is eerst 0
            Fish.y = Fish.y + fishVel;

            /* hier wordt de fishvel bepaald door de hele tijd gravity erbij op te tellen dus hij stal steeds
            sneller naar beneden gaan vallen*/
            fishVel = fishVel + Gravity;
        }

        //Als je klikt maak je de Fishvel -11 waarna hij steeds weer -8 gaat doen. hij schiet dus heel even omhoog






        //FUNCTION GRAVITY VAN DE VIS






        function fishSwim(event:MouseEvent):void
        {
            fishVel = -11;
        }





        //FUNCTION VOOR HET REAGEREN OP SCHIETEN






        //Hier registreert hij of je het knopje wat ik aangeef inklikt
        function keyDownHandler(keyEvent:KeyboardEvent):void
        {
            //keyCode geeft aan om welk knopje het gaat
            if (keyEvent.keyCode == 68)
            {
                //Dus als je het knopje van die functie indrukt gebeurt de functie shootbullet
                shootBullet();
            }
        }




        //FCUNTION VOOR HET MAKEN VAN SCHIETEN





        //dit is de functie shootbullet
        function shootBullet():void
        {
            //eerst maak je nieuwe bullets in de array aan
            var Bullet:bullet = new bullet();

            //daarna zeg ik dat de start positie van de bullet hetzelfde als de vis moet zijn
            Bullet.x = Fish.x + 25;
            Bullet.y = Fish.y;

            //Hier wordt een bullet aan de stage toegevoegd
            addChild(Bullet);
            //en hier drukt hij de vorige bullet verder in de array
            Bullets.push(Bullet);
        }




        //FUNCTION VOOR DOEN VAN HET SCHIETEN





        function Shooting():void
        {
            /* hier gebruik ik een for loop om te bepalen dat wanneer b kleiner is dan de arrays lenght
            de loop wil blijven gaan.
            bij de b maak je gewoon een variable aan.
            de hele tijd moet hij b++ omdat door de array heen, zodat je de hele tijd door de bullets
            in de array kan komen */
            for (var b:int = 0; b < Bullets.length; b++)
            {
                //dit is de functie voor het bewegen van de bullet
                Bullets[b].x +=  10;

                //hier wordt gezegd dat als de bullet buiten de stage komt hij moet worden verwijderd
                if (Bullets[b].x > stage.stageWidth)
                {
                    removeChild(Bullets[b]);
                    Bullets[b] = null;
                    Bullets.splice(b,1);
                }
            }
        }





        //FUNCTION VOOR HET REAGEREN OP SCHIETEN2




        /* ALLE COMMENTS IN DE FUNCTIE HIERBOVEN VAN HET HELE SCHIETEN GELDEN OOK VOOR DE 3 FUNCTIER HIERONDER*/

        function keyDownHandler2(keyEvent2:KeyboardEvent):void
        {
            if (keyEvent2.keyCode == 65)
            {
                shootBullet2();
            }
        }





        //FCUNTION VOOR HET MAKEN VAN SCHIETEN2




        function shootBullet2():void
        {
            var Bullet:bullet = new bullet();

            Bullet.x = Fish.x + 25;
            Bullet.y = Fish.y;

            addChild(Bullet);
            Bullets2.push(Bullet);
        }





        //FUNCTION VOOR HET DOEN VAN SCHIETEN2





        function Shooting2():void
        {
            for (var b:int = 0; b < Bullets2.length; b++)
            {
                Bullets2[b].x -=  10;

                if (Bullets2[b].x > stage.stageWidth)
                {
                    removeChild(Bullets2[b]);
                    Bullets2[b] = null;
                    Bullets2.splice(b,1);
                }
            }
        }




        //FCUNTION VOOR HET REAGEREN VAN SCHIETEN3





        function keyDownHandler3(keyEvent3:KeyboardEvent):void
        {

            if (keyEvent3.keyCode == 87)
            {
                shootBullet3();
            }
        }




        //FUNCTION VOOR HET MAKEN VAN SCHIETEN3





        function shootBullet3():void
        {
            var Bullet:bullet = new bullet ();

            Bullet.x = Fish.x + 25;
            Bullet.y = Fish.y;

            addChild(Bullet);

            Bullets3.push(Bullet);
        }





        //FCUNTION VOOR HET DOEN VAN SCHIETEN3




        function Shooting3():void
        {

            for (var b:int = 0; b < Bullets3.length; b++)
            {
                Bullets3[b].y -=  10;

                if (Bullets3[b].Y > stage.stageHeight)
                {
                    removeChild(Bullets3[b]);
                    Bullets3[b] = null;
                    Bullets3.splice(b,1);
                }
            }
        }





        //FCUNTION VOOR HET REAGEREN VAN SCHIETEN4





        function keyDownHandler4(keyEvent4:KeyboardEvent):void
        {
            if (keyEvent4.keyCode == 83)
            {
                shootBullet4();
            }
        }





        //FCUNTION VOOR HET MAKEN VAN SCHIETEN4




        function shootBullet4():void
        {
            var Bullet:bullet = new bullet();

            Bullet.x = Fish.x + 25;
            Bullet.y = Fish.y;

            addChild(Bullet);
            Bullets4.push(Bullet);
        }





        //FUNCTION VOOR HET DOEN VAN SCHIETEN4




        function Shooting4():void
        {

            for (var b:int = 0; b < Bullets4.length; b++)
            {
                Bullets4[b].y +=  10;

                if (Bullets4[b].x > stage.stageWidth)
                {
                    removeChild(Bullets4[b]);
                    Bullets4[b] = null;
                    Bullets4.splice(b,1);
                }
            }
        }











        //hier laat ik de timer starten;
        AddEnemyTimer.start();




        //FUNCITON VOOR HET SPAWNEN VAN ENEMIES




        //deze functie zorgt ervoor dat er enemys spawnen;
        function addEnemy(event:TimerEvent):void
        {
            //Dit zorgt ervoor dat er nieuwe enemies aan de array worden toegevoegd
            var monster:Enemy = new Enemy();

            //hier wordt de startwaarde van de enemies bepaald
            monster.x = stage.stageWidth + 200;
            monster.y = (500 - (Math.floor(Math.random()*400)));

            //hier wordt de enemy toegevoegd
            addChild(monster);
            //en hier wordt hij door geduwd in de array
            Enemies.push(monster);
        }



        //FUNCTION VOOR HET BEWEGEN VAN ENEMIES





        function moveEnemies():void
        {
            for (var a:int = 0; a < Enemies.length; a++)
            {
                Enemies[a].x -=  2;

                if (Enemies[a].x < -50)
                {
                    removeChild(Enemies[a]);
                    Enemies[a] = null;
                    Enemies.splice(a,1);
                }

            }
        }




        //FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY




        function checkCollisions():void
        {
            for (var b = Bullets.length -1; b >= 0; b--)
            {
                for (var a = Enemies.length -1; a >= 0; a--)
                {
                    if (Bullets[b].hitTestObject(Enemies[a]))
                    {
                        removeChild(Bullets[b]);
                        Bullets[b] = null;
                        Bullets.splice(b,1);

                        removeChild(Enemies[a]);
                        Enemies[a] = null;
                        Enemies.splice(a,1);

                        score = score + 5;
                        break;
                    }
                }
            }
        }




        //FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY





        function checkCollisions2():void
        {
            for (var b = Bullets2.length -1; b >= 0; b--)
            {
                for (var a = Enemies.length -1; a >= 0; a--)
                {
                    if (Bullets2[b].hitTestObject(Enemies[a]))
                    {
                        removeChild(Bullets2[b]);
                        Bullets2[b] = null;
                        Bullets2.splice(b,1);

                        removeChild(Enemies[a]);
                        Enemies[a] = null;
                        Enemies.splice(a,1);

                        score = score + 5;
                        break;
                    }
                }
            }
        }




        //FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY





        function checkCollisions3():void
        {
            for (var b = Bullets3.length -1; b >= 0; b--)
            {
                for (var a = Enemies.length -1; a >= 0; a--)
                {
                    if (Bullets3[b].hitTestObject(Enemies[a]))
                    {
                        removeChild(Bullets3[b]);
                        Bullets3[b] = null;
                        Bullets3.splice(b,1);

                        removeChild(Enemies[a]);
                        Enemies[a] = null;
                        Enemies.splice(a,1);

                        score = score + 5;
                        break;
                    }
                }
            }
        }




        //FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY






        function checkCollisions4():void
        {
            for (var b = Bullets4.length -1; b >= 0; b--)
            {
                for (var a = Enemies.length -1; a >= 0; a--)
                {
                    if (Bullets4[b].hitTestObject(Enemies[a]))
                    {
                        removeChild(Bullets4[b]);
                        Bullets4[b] = null;
                        Bullets4.splice(b,1);

                        removeChild(Enemies[a]);
                        Enemies[a] = null;
                        Enemies.splice(a,1);

                        score = score + 5;
                        break;
                    }
                }
            }
        }





        //FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY





        function checkCollisions5():void
        {
            for (var a = Enemies.length -1; a >= 0; a--)
            {
                if (Enemies[a].hitTestObject(Fish))
                {
                    clearing();
                    addChild(afbutton);
                }
            }
        }





        //FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY






        function checkcollisions6():void
        {
            for (var a = Enemies.length -1; a >= 0; a--)
            {
                if (Enemies[a].hitTestObject(haaienLijn))
                {
                    clearing();
                    addChild(afbutton);
                }
            }
        }





        //FUNCTION VOOR WANNEER JE AF BENT




        function Af():void
        {

            if (Fish.y < 0)
            {
                clearing();

            }

            if (Fish.y > 600)
            {
                clearing();
            }

            if (Fish.hitTestObject(Pipe))
            {
                clearing();
            }

            if (Fish.hitTestObject(Pipe1))
            {
                clearing();
            }

            if (Fish.hitTestObject(Pipe2))
            {
                clearing();
            }

            if (Fish.hitTestObject(Pipe3))
            {
                clearing();
            }

            if (Fish.hitTestObject(Pipe4))
            {
                clearing();
            }

            if (Fish.hitTestObject(Pipe5))
            {
                clearing();
            }

            if (Fish.hitTestObject(Pipe6))
            {
                clearing();
            }

            if (Fish.hitTestObject(Pipe7))
            {
                clearing();

            }
        }




        //FUNCITON DIE ALLE EVENTLISTENERS VERWIJDERT





        function clearing():void
        {
        stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);

        stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler2);

        stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler3);

        stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler4);

        stage.removeEventListener(MouseEvent.MOUSE_DOWN,fishSwim);

        removeEventListener(Event.ENTER_FRAME,Main);

        AddEnemyTimer.stop();

        AddEnemyTimer.reset();

        AddEnemyTimer.removeEventListener(TimerEvent.TIMER, addEnemy);

        addChild(afbutton);
        }





        //FUNCTION VOOR HET KLIKKEN OP DE RESTART KNOP






        function onAfButton(event:MouseEvent)
        {
            if (afbutton.parent)
            {
                afbutton.parent.removeChild(afbutton);
                removeEventListener(MouseEvent.CLICK,onAfButton);
            }
            theGames();

            if (score > bestscore)
            {
                bestscore = score;
            }
            highscore_txt.text = "Highscore : " + bestscore.toString();
            score = 0;
        }

    }
}

}

2 个答案:

答案 0 :(得分:0)

我不确定这对我使用Javascript而不是Actionscript有多大帮助,但我几乎可以保证你的问题是由你对敌人的计时器造成的。我会确保你在重新启动时正确地移除计时器。

答案 1 :(得分:0)

我假设当你的角色遇到管道等时,af()函数会重置游戏。

看来你的onAFButton功能实际上并没有重置任何东西 - 它只是调用游戏()来重建游戏!

结果,你告诉你所有的物品再次设定它们的速度,这将是之前的两倍。