Fenyx Engine: добавляем счётчик FPS

от
Java    fenyx, engine, opengl

Всем доброго времени суток! Сегодня мы добавим счётчик FPS в созданное на предыдущем уроке окно. Все необходимые либы по-прежнему можно скачать тут или же использовать уже скачанные. По мере обновления движка, я буду выкладывать новые сборки.

Предполагаю, что проект из предыдущей статьи у вас уже создан, поэтому работать будем в нём. Для начала добавим новый package и назовём его com.aftergames.ui (или же по вашему вкусу), это будет основной папкой для всех наших UI и производных объектов графического интерфейса. Добавим новый файл UIFactory.java. Тут будут храниться статические экземпляры всех наших UI объектов для быстрого доступа из стейтов. Приведу его листинг с комментариями:
  1. package com.aftergames.ui;
  2.  
  3. import com.fenyx.graphics.Color;
  4. import com.fenyx.ui.UIManager;
  5. import com.fenyx.ui.components.UIText;
  6.  
  7. /**
  8.  *
  9.  * @author DarkPartizaN
  10.  */
  11. public class UIFactory {
  12.  
  13.     //Обозначаем новый элемент текста на экране
  14.     public static UIText uiTxtFps;
  15.  
  16.     public static void init() {
  17.         //Создаём наш текст
  18.         uiTxtFps = new UIText();
  19.         //Задаём ему позицию от верхнего левого угла
  20.         uiTxtFps.setPosition(10, 10);
  21.         //Задаём цвет текста
  22.         uiTxtFps.color = Color.green.get();
  23.  
  24.         //Добавляем UI объект на дефолтный слой в UIManager
  25.         UIManager.add(uiTxtFps);
  26.         //Включаем отображение и обработку UI
  27.         UIManager.setActive(true);
  28.     }
  29. }

В целом рекомендую для каждого своего проекта создавать UIFactory, это значительно упрощает работу с графическим интерфейсом в процессе создания приложения или игры, так как позволяет быстро взаимодействовать с UI из любых состояний приложения (кроме краша, хотя при наличии грамотного catch, можно и оттуда). Впрочем, это лишь рекомендация, движок не ограничивает ваше взаимодействие с UI объектами, в силу своей модульной системы.

Итак, мы создали текст, задали ему настройки отображения (к слову, при отсутствии явно заданного шрифта - берётся системный), и добавили его на полотно графического интерфейса. Теперь нужно приаттачить UIManager в наш основной контекст. Займёмся этим.

Перейдём в DemoApp.java и после createWindow() добавим инициализацию нашего UIFactory (не забудьте сделать импорт):
  1. UIFactory.init();

Затем перейдём в наш стейт TestState.java, и в методе process(), который отвечает за непосредственный цикл выполнения состояния, добавим обновление нашего текста:
  1. public void process() {
  2.     UIFactory.uiTxtFps.setText(StringUtils.concat("FPS: ", EngineTimer.fps));
  3. }

Таким образом мы берём текущее значение кадров в секунду, которое автоматически считается движком и сохраняется в переменную EngineTimer.fps, и обновляем значение текста на экране. Наслаждаемся результатом!
AE_lesson2.PNG

В следующем уроке пройдёмся подробнее по некоторым нюансам и аспектам из двух предыдущих. :gg:
  • +1
  • views 747