Предыдущая Следующая
Menu menu;
private bool menuState; private int cursorState;
После этих объявлений переходим в конструктор класса Gamel, где создаем полноценный объект menu класса Menu и инициализируем обе переменные.
menu = new Menu(); menuState = true; cursorState = 1;
Переменная menuState при запуске игры получает значение true, поэтому первым делом на экран будет выводиться меню игры. В свою очередь, переменная cursorState равна 1, а значит, в игре изначально активируется табличка с надписью Игра. Далее в методе LoadGraphicsContent() мы загружаем всю игровую графику, включая меню.
В предыдущих версиях игры в методе Initialize() класса Gamel мы определяли все игровые позиции объектов. Сейчас также можно использовать этот метод, но был реализован улучшенный механизм, в частности создан отдельный метод NewGame(), исходный код которого выглядит следующим образом:
/// <summary>
/// Новая игра
/// <summary>
public void NewGame()
{
j = 0;
for (int i = 0; sprite.Length > i;
{
sprite[i].spritePosition = new Vector2(rand.Next(l0, Window.ClientBounds.Width - l50), j = j - 300);
}
platform.spritePosition = new Vector2(Window.ClientBounds.Width/ 2, Window.ClientBounds.Height - 90); score0 = 0; scorel = 0; score2 = 0;
222 Создаем игровое меню
зсогеЗ = 0; score4 = 0; base.Initialize();
}
Зачем это нужно? Дело в том, что нам необходимо реализовать обратный старт игры в момент, когда пользователь выйдет из игры в меню и потом захочет опять начать игру сначала. Для этих целей и создается метод NewGame(). Вызов этого метода будет происходить непосредственно в меню игры, и каждый раз, когда пользователь выходит в меню, а потом вновь запускает игру, происходит установка объектов на новые игровые позиции.
Исходный код метода NewGame() почти не претерпел изменений, за исключением того, что переменная j, увеличивающая координату по отрицательной оси Y, инициализируется именно в этом методе нулевым значением. Сделано это по одной причине. Как вы знаете, переменная j помогает нам удалить друг от друга спрайты по вертикали на 300 пикселей. Каждое ее увеличение будет содержать большое отрицательное значение, например для пяти спрайтов это значение будет равно -1500 пикселей. Если пользователь зайдет в игру, потом выйдет в меню, а затем опять вернется в игру, то переменная j по-прежнему будет содержать значение в -1500 пикселей и установка игровых объектов будет происходить от этого значения.
В результате при повторном старте игры пользователю придется подождать, пока на экране появится первый спрайт, а при третьем или даже десятом старте игры на это уйдет еще больше времени. Поэтому при каждом новом вызове метода NewGame() необходимо обнулять все игровые переменные. Учтите этот нюанс во всех ваших последующих играх. Каждый новый старт игры должен обязательно обнулять все предыдущие игровые состояния, если, конечно, не предусмотрена система сохранения игры или перехода на новый уровень. Предыдущая Следующая
|