Есть несколько способов, чтобы идти об этом ...
Вы можете использовать разные 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, вместо того, чтобы изменять все остальные обновления объектов отдельно. Довольно продвинутый материал, но может стоить того, чтобы его изучить.
Ничего себе, благодарю вас за такой подробный ответ (и отвечая на мой другой вопрос, который помог многим), я обязательно попробую позже и прочитаю обучающие материалы, которые вы предоставили. – AfromanJ