2013-11-09 1 views
0

Я новичок в разработке игр, но знаком с языками программирования. Я начал использовать Flixel и иметь рабочую игру Breakout со счетом и жизнью.Flixel Game Over Screen

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

  1. Проверить IF жизнь равна до 0
  2. Пауза игры и показывать новый экран (возможно прозрачный), который говорит: «Game Over»
  3. когда пользователь нажимает или хиты ENTER перезапустить уровень

Вот функция, я в настоящее время обновить жизнь:

private function loseLive(_ball:FlxObject, _bottomWall:FlxObject):void 
{ 
    // check for game over 
    if (lives_count == 0) 
    { 

    } 
    else 
    { 
     FlxG:lives_count -= 1; 
     lives.text = 'Lives: ' + lives_count.toString() 
    } 
} 

Вот мой главный game.as:

package 
{ 
    import org.flixel.*; 

    public class Game extends FlxGame 
    { 
     private const resolution:FlxPoint = new FlxPoint(640, 480); 
     private const zoom:uint = 2; 
     private const fps:uint = 60; 

     public function Game() 
     { 
      super(resolution.x/zoom, resolution.y/zoom, PlayState, zoom); 
      FlxG.flashFramerate = fps; 
     } 
    } 
} 

ответ

2

Есть несколько способов, чтобы идти об этом ...

Вы можете использовать разные FlxStates, как я описал в ответе на ваш другой пост: Creating user UI using Flixel, хотя вам нужно будет умнее пропустить счет или что-то еще, или использовать Registry-type setup

Если вы хотите, чтобы это действительно работало, как описано выше, с прозрачным экраном с надписью, вы можете попробовать что-то вроде этого (помните, что конкретные детали могут отличаться для вашего проекта, я просто пытаюсь дайте вам идею):

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

Вы хотите определить флаг - просто булева - который отслеживает ли не игра все еще продолжается или нет: private var _isGameOver:Boolean; В самом конце StartLevel(), установите это false.

В вашей create() функции для вашего PlayState, построить новый FlxGroup, который имеет все, что вы хотите на вашем Game Over экране - некоторые текст, изображение, и то, что говорит «Нажмите кнопку ENTER для перезагрузки» (или любой другой). Затем установите значение visible = false.Код, который может выглядеть примерно так:

grpGameOver = new FlxGroup(); 
grpGameOver.add(new FlxSprite(10,10).makeGraphic(FlxG.Width-20,FlxG.Height-20,0x66000000)); // just a semi-transparent black box to cover your game screen. 
grpGameOver.add(new FlxText(...)); // whatever you want to add to the group... 
grpGameOver.visible = false; 
add(grpGameOver); // add the group to your State. 

В зависимости от того, как ваша игра установки, вы также можете установить объекты в scrollFactor вашей группы 0 - если ваша игра экране прокручивается на всех:

grpGameOver.setAll("scrollFactor", new FlxPoint(0,0)); 

в вашей update() функции, вам нужно разделить его на 2 части: одна для того, когда игра закончена, и один для если игра продолжается:

if (_isGameOver) 
{ 
    if (FlxG.keys.justReleased("ENTER")) 
    { 
     grpGameOver.visible = false; 
     StartLevel(); 
    } 
} 
else 
{ 
    ... the rest of your game logic that you already have ... 
} 
super.update(); 

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

Тогда последнее, что вам нужно сделать, это в вашей loseLive() логике:

if (lives_count == 0) 
{ 
    _isGameOver = true; 
    grpGameOver.visible = true; 
} 
else 
... 

Это должно сделать это!

Я бы очень рекомендовал провести некоторое время с различными учебными пособиями и примерами проектов, чтобы получить лучшее представление о Flixel в целом. Photon Storm имеет некоторые great material играть (несмотря на то, что он перепрыгнул HTML5 игр)

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

+1

Ничего себе, благодарю вас за такой подробный ответ (и отвечая на мой другой вопрос, который помог многим), я обязательно попробую позже и прочитаю обучающие материалы, которые вы предоставили. – AfromanJ

 Смежные вопросы

  • Нет связанных вопросов^_^