Главная » Программирование игр под Android » ГЛАВНОЕ МЕНЮ MRNOM  – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

 

Экран главного меню достаточно прост. Он отображает логотип, команды главного меню, а также представляет настройки звука в виде кнопки-переключателя. Он реагирует на нажатие команд меню или кнопки регулировки звука. Чтобы реализовать это поведение, нам необходимо знать две вещи: где на экране отображаются изображения и каковы области касаний, которые приведут либо к смене экрана, либо к изменению звуковых настроек. Рисунок 6.2 показывает, как и где мы отображаем различные изображения на экране. Из этого мы сможем точно определить зоны касаний.

Рис. 6.2. Главное меню; координаты показывают, как и где мы визуализируем различные изображения, и выделяют зоны касания Х-координаты логотипа и команды главного меню вычислены таким образом, что их центры лежат на оси х.

Теперь реализуем класс Screen (листинг 6.5).

Листинг 6.5. MainMenuScreen.Java, главное меню package com.badlogiс.androidgames.mrnom;

Снова наследуем от Screen и реализуем соответствующий конструктор для него.

Далее идет метод updateO, в котором выполняем проверку событий касания. Сначала получаем TouchEvent и KeyEvent из экземпляра класса Input, предоставленного нам Game. Обратите внимание, что мы не используем KeyEvent, но в любом случае запрашиваем их для того, чтобы очистить внутренний буфер (да, это не очень удобно, но что делать). Далее проходим в цикле через все TouchEvent, пока не найдем то событие, которое имеет тип TouchEvent. T0UCHUP. Мы могли бы также искать события TouchEvent.T0UCH D0WN, но в большинстве пользовательских интерфейсов событие отпускания используется для определения того, что определенный элемент пользовательского интерфейса был нажат.

Как только мы нашли подходящее событие, проверяем, относится ли оно ко звуку или к командам меню. Чтобы подчистить код, я написал метод inBounds, который принимает событие касания, х- и у-координаты, а также высоту и шири ну. Этот метод определяет, произошло ли касание внутри прямоугольника экрана с заданными параметрами и возвращает true или false.

Если нажата кнопка-переключатель для работы со звуком, просто инвертируем булево значение Settings. soundEnabled. Если нажата какая-либо из команд главного меню, переходим к соответствующему экрану, создавая его и запуская его с помощью Game. setScreen. Наш метод может сразу же вернуть управление, если Mai nMenuScreen больше нечего делать. Мы также проигрываем звуки нажатия, если нажата кнопка-переключатель звука или команда главного меню, а звук включен.

Обратите внимание, что все события касания будут сообщаться в соответствии с нашим конечным разрешением – 320 х 480 пикселов. Так получается благодаря магии масштабирования:

Метод inBounds работает так же, как и методы, рассмотренные ранее: принимает TouchEvent и прямоугольник и сообщает вам, находятся ли координаты события касания внутри прямоугольника.

Метод present покажется, наверное, самым долгожданным, но, боюсь, он не такой уж впечатляющий. Наш небольшой фреймворк игры действительно упрощает отображение главного меню. Мы просто отрисовываем фон на (0; 0), фактически стирая наш фреймбуфер, так что никакого вызова Graphics. cl еаг не требуется. Далее рисуем логотип и команды главного меню согласно координатам на рис. 6.2. Метод оканчивается рисованием кнопки звука в зависимости от текущих настроек. Как видите, мы используем тот же Pixmap, но просто рисуем соответствующую часть его (кнопка переключения звука, см. рис. 6.1). Это было несложно.

Последний элемент, который нам нужно обсудить, – метод pause. Поскольку мы изменяем одну из настроек на этом экране, необходимо удостовериться, что она сохранится во внешнем хранилище. Это совсем несложно сделать с помощью класса Settings.

Методы resume и dispose на этом экране ничего не делают.

Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии