Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            jMonkeyEngine 3 Урок (1) — Hello SimpleApplication (создание базового приложения)

jMonkeyEngine 3 Урок (1) — Hello SimpleApplication (создание базового приложения)

Опубликованно: 23.01.2016, 12:54
Последняя редакция, Andry: 29.08.2017 19:51

Предыдущий: Уроки для начинающих, Следующий: Hello Node.

Предпосылка: это руководство предполагает, что вы уже загрузили и установили jMonkeyEngine SDK.

В данной серии уроков мы предполагаем, что вы используете  jMonkeyEngine SDK. Как Java программист, вы быстро увидите, что, в принципе, вы можете писать код jMonkeyEngine в любой среде (IDE NetBeans, Eclipse, IntelliJ) разработки или даже из командной строки.

Хорошо, давайте приступим к созданию нашего первого приложения в jMonkeyEngine3.

Создание проекта:

В jMonkeyEngine SDK:

  1. Выберите Файл ▸ Создать проект… в главном меню.
  2. В появившемся окне Создать проект выбираете пакет JME3 затем Basic Game и кликните [Далее].
    1. Укажите имя проекта, например, HelloWorldTutorial.
    2. Укажите путь, где будет храниться ваш новый проект, например, папка jMonkeyProjects в вашем домашнем каталоге.
  3. Нажмите [Готово].

Если у вас есть вопросы, читайте больше о создании проекта здесь.

Мы рекомендуем пройти все шаги самостоятельно, как описано в уроках. Кроме того, вы можете создать проект, основанный на шаблоне JmeTests в jMonkeyEngine SDK. Так создастся проект, который уже содержит jme3test.helloworld образцы ( и многое другое). Например, вы можете использовать проект JmeTests чтобы проверить, получилось ли все правильно.

Расширим SimpleApplication

В этом уроке вам нужно создать пакет jme3test.helloworld в вашем проекте, и создать в нем файл HelloJME3.java.

В jMonkeyEngine SDK:

  1. Щелкните [ПК Мыши] на папке с исходными файлами вашего проекта (папка HelloWorldTutorial в окошке слева сверху(если вы выбрали это название)).
  2. Выберите в выпавшем меню Новый… ▸ Класс Java… для создания нового файла.
  3. Введите имя класса: HelloJME3.
  4. Введите имя пакета: jme3test.helloworld.
  5. Нажмите [Готово].

SDK создаст для вас файл HelloJME3.java.


Пример кода

Замените содержимое файла HelloJME3.java на следующий код:


package jme3test.helloworld;
 
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import com.jme3.math.ColorRGBA;

/** Пример 1 - как начать с самого простого приложения JME3.
* На экране отображается 3D куб с просмотром со всех сторон
* и перемещением с помощью мыши и кнопок WASD. */

public class HelloJME3 extends SimpleApplication {
 
    public static void main(String[] args){
        HelloJME3 app = new HelloJME3();
        app.start(); // начало игры
    }
 
    @Override
    public void simpleInitApp() {
        Box b = new Box(1, 1, 1); // создание фигуры куба
        Geometry geom = new Geometry("Box", b);  // создание геометрии куба из фигуры
        Material mat = new Material(assetManager,
          "Common/MatDefs/Misc/Unshaded.j3md");  // создание простого материала
        mat.setColor("Color", ColorRGBA.Blue);   // установка цвета материала: синий
        geom.setMaterial(mat);                   // установка материала куба
        rootNode.attachChild(geom);              // отобразить куб на сцене
    }
}

Щелкните правой кнопкой  мыши на поле, куда вы вставили код и выбираете Выполнить файл. При появлении диалогового окна настроек jME3, подтвердите настройки по умолчанию.

  1. Вы должны увидеть окно, отображающее простой 3D куб.
  2. Нажимайте клавиши WASD и двигайте мышью, чтобы перемещаться.
  3. Посмотрите на FPS (количество кадров в секунду) и расчеты по объекту в левом нижнем углу. Вам понадобиться эта информация во время разработки, вы ее удалите в конце. (Чтобы прочитать числа корректно, считайте, 14 линий текстовых расчетов? за 14 объектов с 914 вершинами).
  4. Нажмите клавишу Esc, чтобы закрыть приложение.

Поздравляем! Теперь давайте выясним, как это работает!


Понимание кода

Код описанный выше инициализирует сцену и запускает приложение.

Старт SimpleApplication (простого приложения)

Посмотрите на первую строчку: ваш класс HelloJME3.java является расширением com.jme3.app.SimpleApplication.


public class HelloJME3 extends SimpleApplication {
  // ваш код...
}

Каждая игра JME3 является экземпляром класса com.jme3.app.SimpleApplication. Класс SimpleApplication является простейшим примером приложения: он управляет графом 3D-сцены, проверяет ввод данных пользователем, обновление состояния игры, автоматически рисует сцену на экране. Это основные функции игрового движка. Вы просто расширяете это простое приложение и настраиваете его при создании своей игры.

Вы запускаете каждую игру JME3 из метода Main(), также как и любое стандартное приложение Java:

  1. Создайте экземпляр класса на основе SimpleApplication
  2. Вызвать метод start() приложения для запуска игрового движка.
public static void main(String[] args){
    HelloJME3 app = new HelloJME3(); // экземпляр игры
    app.start();                     // старт игры!
}

app.start (); — строчка, которая открывает окно приложения. Давайте узнаем, как вы помещаете что-то в это окно (сцену) дальше.


Понимание терминологии

Что вы хотите сделать Как вы это скажете в терминологии JME3
Вы хотите создать куб. Я создаю Геометрию(Geometry) 1*1*1 с фигурой Куба(Box).
Вы хотите использовать синий цвет. Я создаю Материал(Material) со свойством синего цвета.
Вы хотите раскрасить куб в синий цвет. Я задаю Материал с синим цветом для Геометрии с формой Куба
Вы хотите добавить куб в сцену. Я прикрепляю Геометрию Куба к rootNode (корневому узлу).
Вы хотите, чтобы куб появился в центре сцены. Я создаю Куб(Box) в начале координат = Vector3f.ZERO

Если вы не знакомы с терминологией, подробнее о графе сцены здесь.


Инициализация сцены

Посмотрите на остальную часть образца кода. Метод simpleInitApp() вызывается автоматически один раз, в начале, при запуске приложения. Каждая игра JME3 должна содержать этот метод. В методе simpleInitApp(), вы загружаете игровые объекты до начала игры.


public void simpleInitApp() {
    // инициализация вашего кода...
}

Код инициализации синего куба выглядит следующим образом:


public void simpleInitApp() {
    Box b = new Box(1, 1, 1); // создание фигуры куба
    Geometry geom = new Geometry("Box", b);  // создание геометрии куба из фигуры
    Material mat = new Material(assetManager,
    "Common/MatDefs/Misc/Unshaded.j3md");  // создание простого материала
     mat.setColor("Color", ColorRGBA.Blue);   // установка цвета материала: синий
     geom.setMaterial(mat);                   // установка материала куба
     rootNode.attachChild(geom);              // отобразить куб на сцене
}

В стандартной JME3 игре имеется следующий процесс инициализации:

  1. Вы инициализируете игровые объекты:
    • Вы создаете или загружаете объекты и размещаете их.
    • Вы делаете их видимыми на сцене, присоединяя их к rootNode (корневому узлу).
    • Например: загрузка игрока, местности, неба, противников, препятствий, …, и установка их на стартовые позицияи.
  2. Вы инициализируете переменные:
    • Вы создаете переменные для отслеживания состояния игры.
    • Вы устанавливаете переменным, их начальные значения.
    • Например: установить счет – 0, установить здоровье –100%, …
  3. Вы инициализируете клавиши клавиатуры и действия мышью.
    • Следующии привязки ввода данных предварительно настроены:
      • Клавиши WASD – перемещение по сцене.
      • Движение мышью и кнопки со стрелками – поворот камеры.
      • Esc кнопка – выход из игры.
    • Установите ваши собственные дополнительные кнопки и клики мышью.
    • Например: левый клик мыши для выстрела, кнопка пробел для прыжка, …

Будущее SimpleApplication

Планируется изменить SimpleApplication. Некоторое время назад было решено, что мы должны переопределить класс Application. SimpleApplication в особенности представляет собой проблему защищенных «магических» полей, которые, с одной стороны, позволяют с легкостью взломать одно простое одно-классное приложение, а с другой стороны, новые пользователи его не любят, потому что они понятия не имеют, где cam и AssetManager. К сожалению, много кода относится к Application, и его сложно изменить… особенно в app states.

Итак, мы реализуем план преобразования класса Application в интерфейс. Это даст нам некоторую свободу для итерации по новому набору базовых классов приложений. Здесь вы можете прочитать об изменениях. Как уже говорилось ранее, мы предоставим более лучший дизайн, который не применяется сейчас, но уже можно использовать.

Если вы посмотрите на конструктор SimpleApplication идущий по умолчанию, вы поймете, как это работает.

public SimpleApplication() {   
    this(new StatsAppState(), new FlyCamAppState(), new AudioListenerState(), new DebugKeysAppState());}

Базовое приложение вводится при построении с AppStates по умолчанию. Давайте посмотрим на второй конструктор.

public SimpleApplication( AppState... initialStates ) {   
    super(initialStates);
}

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

public class MyGame extends SimpleApplication {

    public MyGame(){
         super(new MyCustomSate(), new AnotherState(), ....);
    }

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

}

Затем вся логика реализована в AppStates, и ваша SimpleApplication никогда сильно не изменяется, за исключением случаев, когда вы хотите добавить начальную загрузку AppState (или, может быть, вы хотите иметь AppState, который управляет AppStates …), SimpleApplication — это всего лишь список состояний, которые вы используете.

В будущих версиях весь код в SimpleApplication будет переработан в AppStates (InputHandlingState, RenderAppState, какой то другой), и вы будете решать, что вам нужно использовать. Однако как наследия мы сохранили код как есть на данный момент.


Вывод

Вы узнали, что SimpleApplication является хорошей отправной точкой, потому что оно дает вам:

  • Метод simpleInitApp(), где вы можете создавать объекты.
  • rootNode, к которому вы можете прикреплять объекты, чтобы они появлялись на сцене.
  • Полезные настройки ввода данных по умолчанию, с помощью которых уже можно перемещаться по сцене.

При разработке игровых приложений вы хотите:

  1. Инициализировать сцену игры.
  2. Запустить(триггер) игровые действия.
  3. Реагировать на вводимые данные пользователя(реагировать на нажатие клавиш управления персонажем, например).

В следующих уроках мы узнаем, как выполнить эти задачи с jMonkeyEngine 3.

Продолжить изучать урок Hello Node, где вы узнаете более подробную информацию о том, как инициализировать игровой мир, также известный как граф сцены.


Смотрите также:


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

3 комментария на «“jMonkeyEngine 3 Урок (1) — Hello SimpleApplication (создание базового приложения)”»

  1. arachnoden:

    Отлично, давно ждал этого, как можно присоединится к переводу статей? И откуда брать исходный материал?

    • AdiDOS AdiDOS:

      Ну это просто, переводиться http://wiki.jmonkeyengine.org/doku.php страница. BuGaGa уже перевел часть, просто выбираешь еще не переведенные разделы страницы. По поводу размещения то даются права на размещение статей, только учти что визуальный редактор пришлось отключить из за косяков.

  2. BuGaGa BuGaGa:

    Здесь есть рубрика «Переводы», в каждой статье внизу указан источник с официального сайта — там исходники. А на счет перевода, то дождись ответа админа. Может как-то получится распределится и осилить это благое дело :)

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

Содержание

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