Я хотел бы знать, как я смогу реализовать паузу в моей флеш игре - PullRequest
1 голос
/ 15 марта 2011

Во время раннего развития моей игры я не особо задумывался о том, как игра будет приостановлена ​​в случае прерывания игрока. Я подумал, что это не должно быть чем-то слишком сложным, поэтому я оставил это как то, на что я посмотрю, как только я закончу ядро ​​игры.

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

На данный момент я следовал нескольким учебникам, чтобы добраться туда, где я нахожусь сегодня, в основном учебники от ASGamer . Учебное пособие по экрану с предварительным загрузчиком и меню, которое можно найти на этом сайте, является тем, что я использовал, и до сих пор у меня было несколько проблем, о которых я расскажу позже.

В любом случае, мне трудно обернуть голову, как я смогу приостановить или приостановить игру, когда пользователь нажимает назначенную клавишу. Думаю, мне следует объяснить, как функционирует моя игра.

У меня есть 3 кадра в основной временной шкале.

Первый кадр для прелоадера, простой.

Второй кадр - это место, где находится игра. У него есть мой актив и все мои скрипты запускаются в этом кадре.

Третий кадр - стоп (); действие.

Как только прелоадер заканчивает работу, запускаются «Экраны меню», это руководство, которому я следовал. Он загружает и выгружает мувиклипы с помощью UnLoad () и Load ().

Я использую Load (), чтобы загрузить главное меню, которое происходит в начале, затем использую UnLoad (), чтобы выгрузить текущее меню, а затем загрузить следующее назначенное меню, например Главное меню -> Игра, которую я использую Unload(new GameMenu(stage)); С этими меню все время переходят вперед и назад, поэтому иногда это сбивает с толку.

В GameMenu, откуда я запускаю игру, я создал класс GamePlay, расширяющий MovieClip. Оттуда он порождает игроков и врагов и играет как обычная игра, вот тут и начинается моя проблема.

Сначала я попытался создать обработчик клавиш, чтобы получать нажатия клавиш от пользователя. В какой-то момент это сработало, нажатия клавиш регистрировались, но после того, как я внес некоторые изменения в другие скрипты, нажатия клавиш больше не распознавались. Поэтому я переместил нажатия клавиш на свой Main.as, который является основным скриптом, который использует мой fla. События на клавиатуре работают нормально, но теперь фактически останавливают игру ... как мне вообще начать? Мне бы пришлось остановить все мувиклипы и списки событий, пока пользователь снова не нажмет назначенную кнопку паузы, как мне это сделать?

Я где-то читал, что использование конечных автоматов - лучший выбор для паузы в любой игре, но я не уверен, как это сделать, но я уверен, что есть учебники и блоги, которые я могу прочитать, чтобы сделать конечный автомат. , но если бы я добавил один или сделал один, пришлось бы мне переделывать весь мой код, чтобы приспособить конечные автоматы?

Ответы [ 2 ]

3 голосов
/ 16 марта 2011

В идеале ваша игра должна иметь один игровой цикл, который контролирует все действия - большинство флеш-игр предоставят это вам.Где-то что-то слушает Event.ENTER_FRAME и запускает логику для каждого фрейма.

Итак, если вы создали свою игру, используя фреймворк или одну центральную точку доступа к Event.ENTER_FRAME, это легко - выможно либо удалить прослушиватель, вызвать встроенную функцию паузы фреймворка или сделать так, чтобы ваш прослушиватель цикла проверял логический флаг «isPaused».

Если, однако, вы не используете фреймворк и у вас просто естьмножество различных объектов, которые на самом деле не знают друг о друге, и каждый из них самостоятельно слушает ввод кадра, тогда у вас могут возникнуть проблемы.Я думаю, что вам, по сути, придется пройтись и реализовать функцию приостановки на каждом из них, что было бы грубо.

Надеюсь, это поможет!

0 голосов
/ 16 марта 2011

Один из способов облегчить проблему с анимацией - это скрыть игровой экран, когда игра находится в режиме паузы (откройте окно «игра поставлена ​​на паузу» поверх основного игрового экрана), так что вы избавите себя от необходимости останавливать все анимации. Если вы предпочитаете останавливать анимацию, самое простое решение, о котором я могу подумать, - это зарегистрировать все объекты анимации в массиве, чтобы вы могли остановить их все и воспроизвести все снова в простом цикле. Не элегантно, но лучше, чем рефакторинг вашей игры для функции паузы.

Вам определенно нужно будет сохранить булеву переменную isGameRunning, которая будет проверяться на истинность в функциях пользовательского ввода (события клавиатуры и события мыши), игровых логических функциях (ввод кадра) и, возможно, до воспроизведения звуков. Эта переменная избавит вас от необходимости удалять и повторно добавлять события.

...