Фруктовый хаос!
От 0 до Google PlayПривет, а я тут главное меню для игры закончил. Картинки отрисовываются (тестил на своем телефоне с разрешением 720х1280 и на планшете через эмулятор, разрешение не помню, но все растягивалось красиво), кнопочки работают. Пока что все отлично. Особых проблем не было, все решалось достаточно быстро, поэтому и успел сегодня закончить.
Вот так выглядит главное меню (вариант с выключенным и включенным звуком):
Доказать работоспособность кнопок могу только скрином лога и кодом. Начнем с лога.
Выводил в консоль координаты нажатия на экран и, если они входили в площадь кнопок, выводил надпись "внутри кнопки ИГРАТЬ/ОЧКИ", в зависимости от кнопки.
Вот тут было одно неудобство. Точнее назовем это фичей, хех. В самом андроиде точкой отсчета координат является верхний левый угол экрана. Именно там, по мнению андроида, находится координата (0;0). А вот библиотека LibGDX, с помощью которой я пишу, считает иначе, для нее начало координат - нижняя левая точка. То есть, то, что андроида (0;0), то для LibGDX (0;SCREEN_HEIGHT), и наоборот. Пришлось это учитывать при обработке нажатия на экран.
Код
На данный момент игра состоит из трех классов:
1) Класс игры FruitChaosGame.java , который стартует при запуске игры и проводит нужные действия. При старте игры загружает данные в класс Value, о котором позже, по завершению игры сохраняет все текущие настройки и результаты с помощью того же Value.
2) Класс главного меню FCMainMenu.java - занимается отрисовкой главного меню, обработкой нажатия, из него будут стартовать окно игры и окно лучших результатов. Пока что эти кнопки только дают знать о себе в логе.
3) Values.java - некий контейнер, что ли, в котором хранится информация, нужная всем или большинству классов. Дабы не захламлять поля данных классов одними и теми же данными, я вынес их в отдельный класс. Тут хранится все от разрешения экрана смартфона, до настроек звука и сам список лучших результатов.
FruitChaosGame.java
Тут ничего интересного. Инициализируется SpriteBatch (через него происходит вся отрисовка) и текстура заднего фона, которая используется во всех классах, инициализируется тут тоже для того, чтобы не захламлять другие классы.
Метод render можно даже убрать отсюда, он, в принципе, здесь не нужен.
Dispose указывает классу что нужно делать когда объект этого класса уничтожается (то есть, при завершении игры). "Освобождаются" все созданные объекты.
FCMainMenu.java
Получает объект игры, чтобы можно было использовать его данные. Инициализирует изображение главного меню и 3 полигона, четырехугольника. Четырехугольники я использую для того, чтобы было удобнее отслеживать нажатия. Туда вписываются координаты кнопки, учитывая вероятное растягивание изображения из-за разных разрешений смартфонов (scaleX и scaleY - коэффиценты растягивания. Равны соотношению разрешения смартфона и разрешения изображений).
Опять же, для удобной обработки нажатий, функция, которая получает координаты нажатия и четырехугольник, на котором ожидается нажатие, если нажатие входит в этот четырехугольник, то возвращает true, иначе false.
Метод show вызывается при первом появлении окна. Пока что тут устанавливается нужное состояние кнопки громкости, в зависимости от состояния самой громкости к классе Values. Тут можно даже не отображать изображения, все равно частота смены кадров достаточно большая, и метод render вызовется сразу же.
Render занимается обновлением изображения. Вызывается ооочень часто, оно и понятно. Здесь же, несколько раз в секунду, и проверяется нажатие на экран. Три кнопки - три проверки. Все просто. Ну и одна главная, общая, отслеживает непосредственно нажатие.
Values.java
Одногруппница, которая сейчас работает в компании, занимающейся разработкой приложений под android, подсказала, что у зеленого ведерка имеется локальная база данных, в которую будет разумнее запихивать и выбирать данные. Займусь этим в ближайшее время, потом обязательно сделаю отчет по этой теме. Сохранять все в файл и правда не самая разумная идея. Его могут случайно удалить, различные клинеры могут принять его за вредоносный или бесполезный. Не безопасно это, не обдуманно.
На данный момент вот так выглядит игра :) Всё, с чем можно поиграться сейчас - кнопка громкости, она изменяется от нажатия. Остальное в ближайшей перспективе.