Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Статьи
        Основы
            Node

Node

Опубликованно: 19.07.2015, 22:01
Последняя редакция, AdiDOS: 05.05.2016 6:12

В этой статье я расскажу что такое класс Node и зачем он нужен.

Node это стандартный класс входящий в состав библиотеки JME3 , по сути он ни что из себя не представляет он связывает объекты геометрии все объекты добавленные в этот класс будут выполнять одни и те же действия при обращении к данному узлу , далее я приведу пример  кода с использованием этого класса.

package test;

import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.shape.Box;
import com.jme3.texture.Texture;

public class HelloNode extends SimpleApplication {
 Node node = new Node();

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

 }

 // Инициализация сцены
 @Override
 public void simpleInitApp() {
   flyCam.setMoveSpeed(100); // Скорость перемещения в пространстве
   cam.setFrustumFar(10000); // Глубина видимости в пространстве

   // Создаем куб 1 и указываем размер по трем осям
   Box box1 = new Box(1, 1, 1);
   Geometry geomBox1 = new Geometry("Box1", box1);
   Material matBox1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
   Texture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg");
   matBox1.setTexture("ColorMap", tex);
   geomBox1.setMaterial(matBox1);

   // Создаем куб 2
   Box box2 = new Box(1, 1, 1);
   Geometry geomBox2 = new Geometry("Sphere", box2);
   Material matBox2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
   matBox2.setColor("Color", ColorRGBA.Orange);
   geomBox2.setMaterial(matBox2);

   geomBox2.setLocalTranslation(5, 0, 0);

   node.attachChild(geomBox1);
   node.attachChild(geomBox2);

   rootNode.attachChild(node);

 }

 @Override
 public void simpleUpdate(float tpf) {
   node.rotate(tpf, 0, 0);
   node.getChild("Box1").rotate(0, tpf, 0);
 }
}

В этом коде я создал узел под именем node привязал к нему два куба с помощью функции attachChild и в обработчике события simpleUpdate я вращаю узел(node) по оси X в итоге вращаются наши оба объекта а также я с помощью функции getChild(«Box1»)  получил доступ к первому кубу и вращаю его по оси Y , таким образом Box2 вращается по одной оси а Box1 по двум.

1

Теория

Вы скажете а зачем оно нужно я же могу все это сделать не используя этот класс, давайте представим машину у нее есть колеса, руль, кузов у вас стоит задача двигать  эту машину вращать колеса и руль , вы добавили колеса, руль, кузов в класс Node если нужно заставить ее ехать вы обращаетесь к узлу и двигаете ее и таким образом у вас перемещается она вся и одновременно можно получить доступ к колесам и вращать их.

Заключение 

На мой взгляд это очень удобно если ваш проект или игра выростет до больших размеров то распределять все по узлам намного читабельней.

Спасибо за внимание!!

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

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