Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество

SimpleApplication

Опубликованно: 15.04.2017, 17:04
Последняя редакция, Andry: 18.09.2017 13:31

Базовым классом jMonkeyEngine3 является com.jme3.app.SimpleApplication. Главный класс вашей первой игры расширяет SimpleApplication напрямую. Когда вы уверены, что вы смогли разобрались в основах, вы просто расширяете SimpleApplication, чтобы создать собственный базовый класс для своего типа игры, который вы хотите разработать.

SimpleApplication предоставляет вам доступ к стандартным функциям игры, таким как граф сцены (rootNode), управление ресурсами(Asset Manager), пользовательский интерфейс (guiNode), менеджер ввода, аудио-менеджер, физическое моделирование и летающую камеру. Для запуска или выхода из приложения вы вызываете app.start() и app.stop() в вашем экземпляре игры.

Для каждой игры вы (прямо или косвенно) расширяете SimpleApplication ровно один раз в качестве центрального класса. Если вам нужен доступ к любым функциям SimpleApplication из другого игрового класса, сделайте другой класс расширенным AbstractAppState (не расширяйте SimpleApplication еще раз).

В следующем примере кода показана типичная базовая структура игры jME3:

import com.jme3.app.SimpleApplication;

public class MyBaseGame extends SimpleApplication {

    public static void main(String[] args){
        MyBaseGame app = new MyBaseGame();
        app.start();
    }

    @Override
    public void simpleInitApp() {
       /* Инициализация игровой сцены здесь */
    }

    @Override
    public void simpleUpdate(float tpf) {
       /* Взаимодействие с игровыми событиями в основном цикле */
    }

    @Override
    public void simpleRender(RenderManager rm) {
       /* (Необязательно) Сделать дополнительные изменения в frameBuffer и графе сцены. */
    }
}

Давайте посмотрим на API базового класса.

Класс Application(приложение)

Внутренне com.jme3.app.SimpleApplication расширяет com.jme3.app.Application. Класс Application представляет собой стандартное приложение jME3 для 3D-рендеринга в реальном времени (то есть не обязательно игра). Как правило, вы не используете com.jme3.app.Application напрямую для создания игры.

 Поля класса Application Назначение
viewPort
getViewPort()
Объект просмотра для камеры по умолчанию Здесь вы можете зарегистрировать расширенные постпроцессорные фильтры.
settings
setSettings()
Используйте этот объект AppSettings, чтобы указать ширину и высоту дисплея (по умолчанию 640×480), битовую глубину цвета, биты z-буфера, образцы сглаживания и частоту обновления, визуализатор видео и аудио, управление ресурсами(Asset Manager).
Смотрите: AppSettings.
cam
getCamera()
Камера по умолчанию обеспечивает перспективную проекцию, поле зрения 45°, около плоскости = 1 wu, дальняя плоскость = 1000 wu.
assetManager
getAssetManager()
Объект, который управляет путями для загрузки моделей, текстур, материалов, звуков и.т.д.
По умолчанию пути Asset Manager относятся к корневому каталогу вашего проекта.
audioRenderer
getAudioRenderer()
Этот объект дает вам доступ к аудио системе jME3.
listener
getListener()
Этот объект представляет ухо пользователя для аудио системы jME3.
inputManager
getInputManager()
Используйте InputManager, чтобы настроить пользовательский ввод (движение мыши, щелчки, нажатия клавиш и т. Д.) И установить видимость указателя мыши.
stateManager
getStateManager()
Вы используете stateManager Application, чтобы активировать AppStates, такие как Физика
 Методы класса Application Назначение
 setPauseOnLostFocus(true) Установите это логическое значение как true если игровой цикл должен прекратить работу, когда окно теряет фокус(типичный для одиночной игры). Установите это значение false для игр в режиме реального времени и многопользовательских игр, которые продолжают работать.
 start() Вызывайте этот метод, чтобы запустить игру jME3. По умолчанию он открывает новое окно jME3, инициализирует сцену и запускает цикл событий.
 restart() Загружает измененный параметр AppSettings в текущий контекст приложения.
 stop() Останавливает запущенную игру jME3 и закрывает окно jME3.
 start(Type.Headless) etc При запуске приложения переключитесь в контекстную систему jme3. JmeContext.Type:
Type.Display — приложение jME запускается в отдельном окне. (Это значение по умолчанию.)
Приложение Type.Canvas — jME встроено в холст Swing.
Type.Headless — приложение jME запускает цикл обработки событий без вычисления любого представления и без открытия какого-либо окна. Может использоваться для приложения Headless Server.
Type.OffscreenSurface — представление приложения jME не отображается и окно не открывается, но все вычисляется и кэшируется как растровое изображение (задний буфер) для использования другими приложениями.
 Внутренние поля класса/методы Назначение
context
getContext()
Контекст приложения содержит визуализатор, AppSettings, таймер и.т.д. Как правило, прямой доступ к контекстному объекту отсутствует.
inputEnabled Это внутреннее логическое значение изначально истинно, чтобы система отслеживала нажатые пользователем клавиши. И значение ложно, если вы хотите играть на не интерактивной сцене. Вы можете изменять логическое значение с помощью AppSettings.
keyInput, mouseInput
joyInput, touchInput
Стандартные контексты ввода для клавиатуры, мыши и джойстика. Внутренне используется для включения обработки джойстиков или сенсорных устройств. Базовые классы содержат перечисления клавиш и мыши.
renderManager
getRenderManager()
renderer
getRenderer();
Низкоуровневая и высокоуровневая отрисовка интерфейса. В основном используется внутренне.
guiViewPort
getGuiViewPort()
Объект просмотра для ортогонального вида графического интерфейса. Используется только внутри HUD.
timer Таймер внутреннего цикла обновления, не использовать. См. Tpf в simpleUpdate() ниже, чтобы узнать о таймерах.
paused Вещественная используется только внутри во время выполнения для приостановки/возобновления игры. (Вам нужно реализовать свой собственный isRunning boolean или так.)

Класс SimpleApplication

Класс com.jme3.app.Simple Application расширяет общий класс com.jme3.app.Application. SimpleApplication упрощает начало написания игры, поскольку оно добавляет типичные функции:

  • Камера от первого лица (летающая)
  • Граф сцены, который управляет вашими моделями в рендеринге 3D-сцены.
  • Полезная подборка используемых по умолчанию клавиш(подробности ниже).

Помимо функций, предоставляемых Application, SimpleApplication предлагает следующие методы и поля, которые можно использовать, например, внутри метода simpleInitApp():

Поля класса SimpleApplication Назначение
rootNode
getRootNode()
Корневой узел графа сцены. Прикрепите Spatial к корневому узлу и он появится в 3D-сцене.
guiNode
getGuiNode()
Прикрепите плоские элементы GUI(такие как HUD изображения и текст) в этот ортогональных узел GUI для того, чтобы они появились на экране.
flyCam
getFlyByCamera()
По умолчанию управление камерой от первого лица. Это управление камерой по умолчанию позволяет вам перемещаться по 3D-сцене, используя предварительно сконфигурированные клавиши WASD, клавиши со стрелками и мышь.
Методы класса SimpleApplication Назначение
loadStatsView(); Вызывайте этот метод для вывода на экран статистической информации, такой как текущие кадры в секунду и числа треугольников/вершин. Эта информация обычно используется только во время разработки или отладки.
loadFPSText(); Вызывайте этот метод для отоброжения текущей частоты кадров (кадров в секунду) на экран.
setDisplayFps(false); Стандартный SimpleApplication отображает частоту кадров (кадров в секунду) на экране. С помощью этой команды вы можете деактивировать отображение FPS.
setDisplayStatView(false); По умолчанию SimpleApplication отображает статистику сетки на экране, используя класс com.jme3.app.StatsView. Эта информация важна во время фазы разработки и отладки, но для законченной игры вы должны скрыть статистику HUD.

За статистикой есть темные квадраты. Каждая буква, отображаемая в статистике, является квадратом. Каждый квадрат имеет 4 вершины и 2 треугольника.

456/2 = 228
912/4 = 228

Это означает, что если вы отображаете статистику, то помимо всего, что вы добавляете, показанная статистики будут добавлять 456 треугольников и 912 вершин.

Интерфейс SimpleApplication Назначение
public void simpleInitApp() Переопределите этот метод для инициализации игровой сцены. Здесь вы загружаете и создаете объекты, прикрепляете Spatials к корневому узлу и приводите все в исходное положение. См. Также Application States для получения рекомендаций.
public void simpleUpdate(float tpf) Переопределите этот метод, чтобы использовать цикл обновления, весь код, который вы здесь поместите, повторяется в цикле. Используйте этот цикл, чтобы опросить текущее состояние игры и отреагировать на изменения, или позволить игровой механике генерировать встречи и инициировать изменения состояния. Используйте float tpf как фактор для временных действий относительно времени на кадр в секундах: tpf большой на медленных ПК, и маленький на быстрых ПК.
Для получения дополнительной информации о том, как использовать цикл обновления, см. Разделах Application States, и Пользовательские Control.
public void simpleRender(RenderManager rm) Необязательно: разработчики с глубокими знаниями могут переопределить этот метод, если необходимо напрямую изменить frameBuffer и граф сцены.
Используйте app.setShowSettings(true); что бы представить пользователю встроенное окно display settings(окно настроек) при запуске игры; или используйте app.setShowSettings(false); для скрытия этого встроенного окна (в этом случае вы можете предоставить пользователю заставку и панель настроек). Установите это логическое значение перед вызовом app.start() в методе main() в SimpleApplication. Смотрите так же AppSettings.

Сопоставления клавиш используемых по умолчанию

Следующие действия по умолчанию для навигационных элементов отображаются с помощью элемента управления flyCam(летающей камеры) по умолчанию в приложении SimpleApplication: эти сопоставления можно использовать для отладки и тестирования, пока не будет реализована пользовательская обработка ввода.

Клавиши Действия
KEY_ESCAPE Завершает игру, вызывая app.stop()
KEY_C Клавиша отладки: печатает положение, поворот и направление камеры в исходящий поток.
KEY_M Клавиша отладки: печатает использование памяти, используя поток статистики.
F5 Скрывает или показывает статистику слева внизу.

До тех пор, пока включена функция flyCam, доступны следующие так называемые «WASD-ввод, включая MouseLook:

Движение камеры Клавиатура или мышь
Движение вперед
KEY_W
Движение влево (Strafe) KEY_A
Движение назад
KEY_S
Движение вправо (Strafe) KEY_D
Движение вертикально вверх KEY_Q
Движение вертикально вниз KEY_Z
Поворот влево
KEY_LEFT, или передвигайте мышь горизонтально влево (-x)
Поворот вправо KEY_RIGHT, или передвигайте мышь горизонтально вправо (+x)
Поворот вверх KEY_UP, или передвигайте мышь вертикально вперед (+y)
Поворот вниз KEY_DOWN, или передвигайте мышь вертикально назад (-y)
Поворот BUTTON_LEFT или удерживайте нажатой левую кнопку мыши и тащите, чтобы повернуть
Приблизится
AXIS_WHEEL, или прокручивайте колесико мыши назад
Отдалится AXIS_WHEEL, или прокручивайте колесико мыши вперед

Настройки по умолчанию и настройка

По умолчанию SimpleApplication отображает статистику(new StatsAppState()), имеет настроенные клавиши отладки(new DebugKeysAppState()) и предоставляет flyCam(new FlyCamAppState()). Вы можете настроить повторно в SimpleApplication то что хотите использовать иначе в своем приложении.
В следующем примере показано, как можно удалить одно из стандартных AppStates, в данном случае FlyCamAppState:

  • В конструкторе вашего приложения вы можете создать простое приложение только с теми AppStates, которые хотите оставить:
    public MyAppliction() {
      super( new StatsAppState(), new DebugKeysAppState() );
    }
    
  • Или, в методе simpleInitApp(), вы удалите те, которые не хотите оставлять:
      public void simpleInitApp() {
        stateManager.detach( stateManager.getState(FlyCamAppState.class));
        ...
    

Переведено для jmonkeyengine.ru, оригинал.
Автор перевода: Andry

Добавить комментарий

Содержание

jMonkeyEngine.ru © 2017. Все права сохранены.