Восстановление сброса объектов в Actionscript 3 / Flash CS5 - PullRequest
0 голосов
/ 16 марта 2011

Я делаю простую платформенную игру на Flash CS5 и Actionscript 3.0.Когда игрок теряет всю свою жизнь, я хочу, чтобы он перенаправил его на экран «Игра окончена», где он может выбрать кнопку «Повторить попытку», чтобы перезапустить игру.

У меня проблемы с поискомспособ сделать это.Я пытался достичь своей цели, выполнив следующие действия:

  • Установите все (игрок, фон и т. Д.) На visible = false
  • Установите для клипа "Игра окончена"visible = true (он невидим во время игры)
  • Нажмите кнопку в клипе "Игра окончена", чтобы скрыть видеоклип, а затем повторно отобразить все элементы игры
  • Сбросить положение игрока вначать, установить счет на 0, жизни на 3 и т. д.

Вероятно, это не очень хороший способ сделать это, но если это сработает, то я счастлив.Я просто хочу, чтобы экран «Игра окончена» отображалась на короткое время, и если игрок нажимает кнопку «повторить попытку», он может играть с самого начала.

Теперь проблема с моей реализацией вышеописанного заключается в том, чтоЯ установил для всех элементов игрового процесса значение visible = true после того, как им присвоено значение false, игра остановлена ​​... ввод с клавиатуры не активируется, а элементы игры отображаются, но не активны.Есть ли что-то в видимом атрибуте, которого я не знаю?Это портит "состояние" объекта?

Вот некоторые фрагменты кода из файла Actionscript ...

if(lives >= 0) {
                    //print number of lives
                }
                else {
                    gameOverFlag= true;

                    //hide game objects, show game over menu
                    Coins.visible = false;
                    Platforms.visible = false;
                    Background.visible = false;
                    StartPosition.visible = false;
                    thePlayer.visible = false;

                    GameOver.visible = true; //this is the movie clip with the "Game over" text and "Try again" button in 
                    GameOver.TryAgainButton.addEventListener(MouseEvent.CLICK, playagain);

                }


function playagain(event:MouseEvent):void
    {
        //start game again

        Coins.visible = true;
        Platforms.visible = true;
        Background.visible = true;
        StartingPosition.visible = true;
        thePlayer.visible = true;
    }

Ответы [ 2 ]

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

У меня был опыт работы с браузерами и платформами, которые давали мне немного разные реализации моего кода показа / скрытия. Иногда было необходимо переместить элементы со сцены (object.x = -3000), чтобы полностью отключить их. Это не лучшая практика, но она позволит избежать конфликтов при включении и отключении объектов, если вам просто нужно продолжать жить!

Определенно используйте функцию reset (), чтобы обернуть все, что переключает свойства объекта.

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

Это скорее проблема архитектуры, чем проблема кода. Лично я создаю reset() функцию для всех пользовательских классов. Внутри этой функции я делаю все необходимое, чтобы установить объект в состояние по умолчанию; установить положение, альфа, видимый, пользовательский реквизит и т. д.

Что касается того, когда это назвать, то это действительно зависит от вас, но хорошим шаблоном дизайна для вас будет шаблон проектирования штата.

По сути, в вашей игре есть StateManager, которая удерживает и контролирует различные State объекты. Эти State объекты могут представлять различные состояния вашей игры; MainMenu, Play, GameOver, Reset и т. Д.

Каждый State будет иметь begin(), end() и, возможно, update(). Когда ваш StateManager переключает состояния, он будет вызывать end() при State уходе и start() при State входе. Вы можете быть только в одном State одновременно, так что это позволяет вам легко инкапсулируйте свою логику в зависимости от того, где вы находитесь в игре.

Внутри функции begin() вы настраиваете все, что вам нужно для этого конкретного состояния. Например, функция begin() для вашего состояния Play может добавить всех слушателей событий клавиатуры / мыши, которые вам нужны для управления игрой. Внутри функции end() вы очищаете все, что настроили. В функции end() для вашего состояния Play вы, например, удалили бы все прослушиватели событий клавиатуры / мыши. Это означало бы, что игрок не может выполнять какую-либо игровую логику, если он не находится в состоянии Play. Если в вашем State была функция update() (которая называется каждым кадром), то в примере Play вы можете проверить, не осталось ли у игрока больше жизней, или достиг ли счет на следующем уровне. .

Для логики сброса в вашем состоянии Reset вы можете вызвать функцию reset() для всех ваших объектов или установить их вручную. Путь через вашу игру с состояниями будет выглядеть так:

MainMenu (воспроизведение) -> Reset (или состояние Init) -> Play -> GameOver (воспроизведение) -> Reset -> Play

Нет встроенной логики для сброса объекта, вам нужно позаботиться об этом самостоятельно. Принятие такого шаблона может помочь с этим.

...