Воскресенье, 22 Декабря 2024, 04:02

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [358]
Статьи об общих понятиях связанных с созданием игр.
Программирование [85]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [151]
Статьи о программах для создания игр, уроки и описания.
Софт [44]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [169]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [133]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Как вы относитесь к созданию игр без программирования?
Всего ответов: 10486
Главная » Статьи » Создание игр

Урок по JMonkeyEngine №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);

    Запускаем и видим результат.
    На этом первый урок закончен.
  • Категория: Создание игр | Добавил: matthew01 (16 Мая 2013) | Автор: Дмитрий
    Просмотров: 15777 | Комментарии: 1 | Рейтинг: 4.0/15 |
    Теги: начинающим, уроки, JMonkeyEngine, java, JME, Урок, Разработка игр, курс, jMonkeyEngine 3, jME3
    Дополнительные опции:
    Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

    Игровые объявления и предложения:
    Если вас заинтересовал материал «Урок по JMonkeyEngine №1 - Вводный», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

    Всего комментариев: 1
    +0-
    1 camelotos32   (16 Мая 2018 17:42) [Материал]
    camelotos32Интересно...
    Чтож, буду пытаться написать хот что-то suspect

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск по сайту
    10 случ. движков
  • Wintermute Engine
  • HeroEngine
  • Sonic Maker
  • Voxatron
  • Cafu
  • LKI-Creator 3D
  • Empty Clip
  • Ren'Py
  • Ultra Engine
  • Defold
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг