У меня есть функция, которая должна перезапускать всю мою игру, но когда она зацикливается, она ломается. Как мне исправить это в функции перезапуска?

#actionscript-3 #reset #restart #application-restart

#actionscript-3 #Сброс #перезапустить #приложение-перезапуск

Вопрос:

в принципе, у меня есть функция, которая должна возвращаться к init() функции, где игра начинается заново, но по какой-то причине игра решает игнорировать все, что было создано в первый раз, и игнорировать removeChild() части кнопки перезапуска.

Мне пришлось прибегнуть к fscommand("quit"); этому, так как игра просто распадается.

есть ли КАКОЙ-либо способ заставить интервалы, изображения и кнопки (изображения) работать правильно из этого?

вот раздел инициализации:

 private function init(e:Event = null):void
        {

            gameBackground.y = -600; //start position for scrolling animation
            gameLogo.x = (stage.stageWidth/2 - gameLogo.width/2   50);
            gameLogo.y = 55;
            gameLogo.scaleX = 0.8;
            gameLogo.scaleY = 0.8;

            startBtn.scaleX = 0.4;
            startBtn.scaleY = 0.4;

            startBtn.x = (stage.stageWidth/2   125);
            startBtn.y = 500;
            player.x = (stage.stageWidth - player.width) / 2;

            player.y = startBtn.y - 10;
            addChild(gameBackground);
            addChild(player);
            addChild(gameLogo);
            addChild(startBtn);
            addEventListener(MouseEvent.MOUSE_OVER, buttonHover);
            addEventListener(MouseEvent.MOUSE_OUT, buttonHoverOff);
            addEventListener(MouseEvent.CLICK, startgame);
            trace("event listener added");
        }

        public function buttonHover(e:Event):void{
            if (e.target == startBtn)
            {
                startBtn.x = (stage.stageWidth/2   128);
                startBtn.y = 504;
                startBtn.scaleX = 0.395;
                startBtn.scaleY = 0.395;
                mouseClick.play();
            }
        }

        public function buttonHoverOff(e:Event):void{
            if (e.target == startBtn)
            {
                startBtn.x = (stage.stageWidth/2   125);
                startBtn.y = 500;
                startBtn.scaleX = 0.4;
                startBtn.scaleY = 0.4;
            }
        }

        public function btnMovement():void
        {
            startBtn.y  = 10;
        }
        //this function removes all objects for the start menu and goes into the game
        public function startgame(e:Event):void
        {
            if (e.target == startBtn)
            {
                removeEventListener(MouseEvent.MOUSE_OUT, buttonHoverOff);
                mouseHover.play();
                startMove = setInterval(startGameAnimation, 16.6);
                planeTakeOff.play();
                var btnMove:uint = setInterval(btnMovement, 16.6);
                if (startBtn.y > stage.stageHeight   20) {
                    startBtn.y  = 0;
                    startBtn.visible = false;
                    clearInterval(btnMove);
                }
                //game();
                //trace("objects removed.  game starting...");
            }
            trace("remove click found");
        }
  

вот раздел перезапуска:

 public function endScreen():void
        {
            //removeEventListener(Event.EXIT_FRAME, endLoad);



            ENDScore.text = "Score: "   String(scoreBar);

            ENDScore.width = 200;
            var endFormating:TextFormat = new TextFormat();
            endFormating.size = 25;
            endFormating.font = "Consolas";
            endFormating.color= 0xFFFFFF;
            ENDScore.x = stage.stageWidth/2 - ENDScore.width/2   10;
            ENDScore.y = 415;
            ENDScore.setTextFormat(endFormating);
            endBtn.x = 660;
            endBtn.y = 460;
            endBtn.scaleX = 0.9;
            endBtn.scaleY = 0.9;
            addChild(endScr);
            addChild(ENDScore);
            addChild(endBtn);
            closeDetect();
            //trace("button");
            //trace(scoreBar);
        }

        public function closeDetect(e:Event = null):void {

            trace("button");
            endBtn.addEventListener(MouseEvent.CLICK, closeGame);
        }

        public function closeGame(e:Event):void
        {
            //trace("button found");
            //
                //trace("button clicked");
                ////endBtn.visible = false;
                //removeChild(enemyFighter);
                //removeChild(enemyFighter2);
                //removeChild(enemyFighter3);
                //removeChild(enemyFighter4);
                //removeChild(enemyFighter5);
                //removeChild(lMass1);
                //removeChild(lMass2);
                //removeChild(player);
                ////removeChild(bullet);
                //removeChild(endScr);
                //removeChild(endBtn);
                //removeChild(ENDScore);
                //
                //playerDeath = false;
                //thePlayerDies = 3;
                //scoreBar = 0;
                //removeEventListener(MouseEvent.CLICK, closeGame);
                ////init();
                //if (stage) init();
                //else addEventListener(Event.ADDED_TO_STAGE, init); 
                fscommand("quit");

        }
  

Комментарии:

1. Сделайте это отдельным видеороликом со связанным классом, поэтому, когда вам нужна новая игра, вы создаете новый экземпляр этого класса и присоединяете к stage, а затем очищаете и сбрасываете существующий.

2. @Organis спасибо за отзыв! Я попробовал ваш метод, но по какой-то причине я снова получил ту же ошибку, но в другой области (функция, ведущая к перезапуску) После двух попыток исправить ваш метод я решил преобразовать кнопку перезапуска в кнопку выхода. Спасибо вам за помощь! (Я новичок в AS3 по состоянию на октябрь 2018 года)