| 
| matthew01 | Дата: Пятница, 17 Мая 2013, 22:01 | Сообщение # 1 |  |   почетный гость Сейчас нет на сайте | Доброго часа уважаемые форумчане! Я заметил что на сайте полно уроков по разным движкам и языкам программирования, но почему то я не нашел ни одного урока по JMonkeyEngine. Не смотря на то, что движок на писан на Java, он очень даже хорош. Из особенностей хотелось бы отметить следующее:
 Открытый исходный код, и соответственно бесплатность в любых ее проявлениях;
 Мультиплатформенность;
 Неплохой редактор миров, шейдеров и т.д.;
 Современная графика.
 Заинтересовавшись всеми его плюсами я решил плотно сесть за его изучение и вот сейчас решил поделиться накопленным опытом. Для начала хочу предоставь вводный урок, который поможет понять принципы работы в данном движке. Итак приступим...
 
 
 УРОК №1. Для начала создадим новый проект, для этого заходим в "Файл->Создать проект", в категориях выбираем "JME3", в проектах "BasicGame". Жмём "Далее", задаем название (У меня он будет называться "Example") проекта, затем "Готово". В классе "Main" у вас должно получиться следующее:
 
 Код package mygame; 
 import com.jme3.app.SimpleApplication;
 import com.jme3.material.Material;
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.RenderManager;
 import com.jme3.scene.Geometry;
 import com.jme3.scene.shape.Box;
 
 /**
 * test
 * @author normenhansen
 */
 public class Main extends SimpleApplication {
 
 public static void main(String[] args) {
 Main app = new Main();
 app.start();
 }
 
 @Override
 public void simpleInitApp() {
 Box b = new Box(Vector3f.ZERO, 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);
 }
 
 @Override
 public void simpleUpdate(float tpf) {
 //TODO: add update code
 }
 
 @Override
 public void simpleRender(RenderManager rm) {
 //TODO: add render code
 }
 }
 
 Давайте сотрем лишнее, чтоб написать все самим (Чтоб легче запомнить), оставив только следующее:
 
 
 Код package mygame; 
 import com.jme3.app.SimpleApplication;
 import com.jme3.material.Material;
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.RenderManager;
 import com.jme3.scene.Geometry;
 import com.jme3.scene.shape.Box;
 
 public class Main extends SimpleApplication {
 
 public static void main(String[] args) {
 Main app = new Main();
 app.start();
 }
 
 
 public void simpleInitApp() {
 
 }
 
 
 public void simpleUpdate(float tpf) {
 
 }
 
 }
 Операторы импорта оставим, потому что они нам пригодятся. (В среде JME нет необходимости самому прописывать импорт необходимых библиотек, как и в, например, Eclipse. Среда сама предложит добавить недостающие операторы импорта, предварительно выдав ошибку об их отсутствии).
 Далее в методе "public void simpleInitApp()" пишем следующее:
 
 
 Код  Box b = new Box(Vector3f.ZERO, 1,1,1); Geometry g = new Geometry("box", b);
 Material m = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
 m.setColor("Color", ColorRGBA.White);
 g.setMaterial(m);
 Описание строк соответственно:
 Создаем объект "b" типа "Box". В скобках указываем его начальное положение (В примере он располагается в нулевом векторе) и размеры (1x1x1);
 Создаем объект "g" типа "Geometry", который будет рисовать объект указанный в скобках;
 Создаем новый материал "m". В скобках указываем что указываем что загружаем "Unshaded" материал из AssetManager'а. (Потом покажу как загружать свой материал);
 Задаем цвет для материала "m". "Color" показывает цвет какого типа загружаем. (В разных видах материалов их много);
 Присваиваем геометрии "g" созданный ранее материал.
 
 Запускаем проект и... видим черный экран. Правильно, ведь чтоб геометрия была видна, нужно "приаатачить" ее к корневому узлу. Для этого после присваивания материала добавим следующее:
 
 
 Код rootNode.attachChild(g);К узлу "rootNode" добавляем дочерний объект "g".
 После запуска проекта вы должны увидеть белый кубик.
 Заметим, что при передвижении мыши камера вращается. Это "flyCam", с ним мы в дальнейшем будем работать, но сейчас давайте его выключим. Для этого в методе "public void simpleInitApp()" добавим следующее:
 
 
 Код flyCam.setEnabled(false);
 Теперь давайте заставим наш кубик вращаться. Чтоб как-то манипулировать геометрией "g" из другого метода (В данном случае это будет постоянно обновляющийся метод "public void simpleUpdate(float tpf)") необходимо, чтобы этот объект создавался до создания методов, а сразу после создания класса. В итоге наш код будет выглядеть так:
 
 
 Код package mygame; 
 import com.jme3.app.SimpleApplication;
 import com.jme3.material.Material;
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
 import com.jme3.scene.shape.Box;
 
 public class Main extends SimpleApplication {
 Geometry g;
 public static void main(String[] args) {
 Main app = new Main();
 app.start();
 
 }
 
 public void simpleInitApp() {
 flyCam.setEnabled(false);
 Box b = new Box(Vector3f.ZERO, 1,1,1);
 g = new Geometry("box", b);
 Material m = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
 m.setColor("Color", ColorRGBA.White);
 g.setMaterial(m);
 rootNode.attachChild(g);
 }
 
 public void simpleUpdate(float tpf) {
 
 }
 
 }
 Теперь можно с геометрией "g" взаимодействовать из другого метода.
 Пусть наш кубик вращается по оси Y, для этого в методе "public void simpleUpdate(float tpf)" пишем следующее:
 
 Код g.rotate(0, 1*tpf, 0);Запускаем и видим результат.
 На этом первый урок закончен. Если есть необходимость в этих уроках, то в дальнейшем мы рассмотрим Ввод, Звук и т.д. Ну и рассмотрим некоторые аспекты самой Явы.
 
 Спасибо за внимание:) 
 Добавлено (17.05.2013, 22:01)
 ---------------------------------------------
 ...Последующее уроки будут публиковаться как статьи на сайте.
 
 
 Сообщение отредактировал matthew01 - Пятница, 17 Мая 2013, 22:33 |  |  |  |  | 
| 
| krap | Дата: Среда, 23 Октября 2013, 18:02 | Сообщение # 2 |  | почетный гость Сейчас нет на сайте | Урок классный и понятный) А можно ссылочку на следующие уроки?
 |  |  |  |  | 
| 
| CyberGraph | Дата: Четверг, 24 Октября 2013, 13:09 | Сообщение # 3 |  | почетный гость Сейчас нет на сайте | krap, http://gcup.ru/publ/0-0-18812-0-17 
 Вакансия
 |  |  |  |  | 
| 
| grayich | Дата: Среда, 10 Декабря 2014, 22:23 | Сообщение # 4 |  | был не раз Сейчас нет на сайте | jmonkey умеет SPH ? |  |  |  |  | 
| 
| GlumSpirit | Дата: Пятница, 19 Декабря 2014, 00:16 | Сообщение # 5 |  |   уже был Сейчас нет на сайте | Переводить уроки на Русский в официальной Вики не стоит. Там они поддерживают только английский. 
 
 Сообщение отредактировал GlumSpirit - Воскресенье, 25 Января 2015, 17:26 |  |  |  |  | 
| 
| GlumSpirit | Дата: Среда, 10 Мая 2017, 15:46 | Сообщение # 7 |  |   уже был Сейчас нет на сайте | Если кому интересно то уроки можно найти здесь http://jmonkeyengine.ru |  |  |  |  | 
| 
| dengess | Дата: Понедельник, 17 Июля 2017, 22:00 | Сообщение # 8 |  |   уже был Сейчас нет на сайте | Спасибо за сайт!   |  |  |  |  |