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 |
уже был
Сейчас нет на сайте
| Спасибо за сайт!
|
|
| |