

= jMonkeyEngine 3 Урок (1) - Знакомство с простым приложением

Предыдущая: <<jme3#installing_jmonkeyengine_3,Установка JME3>>,
Следующая: <<знакомство_с_узлами#,Знакомство с узлами>>,
Английская версия: <<jme3/beginner/hello_simpleapplication#,Hello SimpleApplication>>


*Предпосылки:* Это руководство предполагает что у вас есть jME3 SDK. link:http://jmonkeyengine.org/wiki/doku.php/[Загрузка jMonkeyEngine SDK].


В этом учебном курсе предполагается что вы используете jMonkeyEngine <<документация/sdk_ru#,SDK_ru>>. Как разработчик Java вы быстро увидите что в общем то вы можете разрабатывать jMonkeyEngine приложения в любой интегрированной среде разработки (IDE NetBeans, Eclipse IntelliJ) или даже в <<jme3/simpleapplication_from_the_commandline#,командной строке>>. 


ОК, если вы готовы то давайте создадим наше первое приложение jMonkeyEngine3.



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

В jMonkeyEngine SDK:


.  Выберите File→New Project… в главном меню.
.  В мастере создания проекта выберите JME3→Basic Game. Нажмите далее. 
..  Укажите имя проекта, например “HelloWorldTutorial
..  Укажите путь куда будет сохранен ваш проект, например папка в домашней директории “jMonkeyProjects.

.  Нажмите финиш. 

Если у вас есть вопросы то вы можете узнать больше <<sdk_ru/project_creation_ru#,Project Creation_ru>> здесь.


<<sdk_ru/sample_code#,JmeTests>>“



== Напишем простое приложение

Для этого урока мы создадим “jme3test.helloworld пакет в нашем проекте, и добавим файл “HelloJME3.java в него. 


В jMonkeyEngine SDK:


.  Нажмите ПКМ на Source Packages вашего проекта.
.  Выберите New…→Java Class создадим новый файл.
.  Имя файла: “HelloJME3
.  Имя пакета: “jme3test.helloworld. 
.  Нажмите Finish.

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



== Пример кода

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


[source,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;

/** Sample 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);              // отобразим куб на сцене
    }
}
----

ПКМ на HelloJME3 файле и выберите Run. Если всплывет диалог настройки то выберите по умолчанию.


.  Вы должны увидеть окно отображающее простой 3D куб.
.  По нажимайте WASD клавиши для перемещения куба по сцене.
.  Посмотрите на значение FPS и информацию о количестве объектов в левом нижнем. Вы будете использовать эту информацию в процессе разработки, вы удалите ее к выпуску игры.
.  Нажмите Escape что бы выйти из приложения.

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



== Разберемся в коде

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



=== Запуск простого приложения

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


[source,java]

----

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

----

Каждая JME3 игра является экземпляром `com.jme3.app.SimpleApplication class`. Класс SimpleApplication это простейший пример приложения: Оно управляет вашим графом сцены проверяет ввод пользователя, обновляет состояние игры и автоматически выводит все на экран. Таковы основные особенность игрового движка. Вы расширите это простое приложение и настроите его что бы создать свою игру.


Ваша JME3 начинается с main() метода как и любое Java приложение:


.  Создание экземпляра класса основанного на “SimpleApplication
.  Вызов метода “start() в приложении. 

[source,java]

----

    public static void main(String[] args){
        HelloJME3 app = new HelloJME3(); // экземпляр игры
        app.start();                     // старт игры!
    }

----

Строка `app.start();` открывает окно приложения. Давайте узнаем что происходит в этом окне (Сцене) далее.



=== Понимание терминологии
[cols="2", options="header"]
|===

a|Что вы хотите сделать
a|Как это выглядит в терминологии JME3

a|Вы хотите создать куб.
a|Вы создаете геометрию с формой куба 1x1x1.

a|Вы хотите использовать синий цвет.
a|Вы создаете материал синего цвета.

a|Вы хотите раскрасить в синий цвет куб.
a|Вы назначает материал синего цвета геометрии с формой куба.

a|Вы хотите добавить куб на сцену.
a|Вы закрепляете геометрию с формой куба к корневому узле.

a|Вы хотите чтобы куб появился в центре.
a|Вы создаете куб в начале координат = “Vector3f.ZERO.

|===

Если вы не знакомы с терминологией, то почитайте <<документация/jme3_ru/граф_сцены_и_другая_терминология_jme3#,Граф Сцена>> здесь.



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

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


[source,java]

----

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

----

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


[source,java]

----

    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 имеет следующий процесс инициализации:


.  Вы инициализируете игровые объекты:
**  Вы создаёте или загружаете объекты и указываете их положение.
**  Ваши объекты появляются на сцене путем присоединения их к “rootNode.
**  *Пример:* Загрузка персонажей, ландшафта, неба, врагов, препятствий, …, и размещение их на стартовых позициях.

.  Инициализация переменных
**  Вы создаете переменные для отслеживания состояния игры. 
**  Вы устанавливаете переменные и их начальные значения. 
**  *Пример:* Установка “очки в 0, установка “жизнь в 100%,…

.  Вы инициализируете клавиши и действия мышью.
**  Следующие привязки предварительно настроенные:
***  W,A,S,D клавиши – Перемещение по сцене.
***  Движение мышью и стрелками – управление камерой.
***  Escape клавиша – закрыть игру.

**  Определите собственные дополнительные клавиши мыши и кнопки действия.
**  *Пример:* ЛКМ для стрельбы, пробел для прыжка, …



== В заключение

Теперь вы знаете что SimpleApplication является хорошей отправной точкой поскольку оно обеспечивает:


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

Когда разрабатываете игру вы хотите:


.  Инициализировать сцену в игре.
.  Настроить систему ввода. 
.  Создать события на ввод от пользователя.

Теперь смотрите следующие учебники по jMonkeyEngine 3.


Прочтите <<документация/jme3_ru/начальная/знакомство_с_узлами#,Знакомство с узлами>> и узнайте как инициализировать игровой мир известный так же как граф сцены.

'''

См.также:


*  link:http://jmonkeyengine.org/wiki/doku.php/[Install the jMonkeyEngine]
*  <<jme3/simpleapplication_from_the_commandline_ru#,SimpleApplication From the Commandline_ru>>
*  <<sdk_ru/project_creation_ru#,Create a JME3 project>>.
<tags><tag target="beginner" /><tag target="intro" /><tag target="documentation" /><tag target="init" /><tag target="simpleapplication" /><tag target="basegame" /></tags>
