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

MotionPath

Опубликованно: 11.05.2017, 16:25
Последняя редакция, Andry: 11.05.2017 16:59

MotionPath описывает движение spatial точки между точками пути. Путь может быть линейным или закругленным. Вы используете MotionPaths для удаленного управления spatial или камерой.

Если вы хотите дистанционно управлять целой катсценой с несколькими spatials двигающимися в разное время, то рекомендуется использовать MotionPaths вместе с Cinematics.

Образецы кода

Что такое точки пути?

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

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

  • way point(Точка пути) — это одна позиция на пути.
  • MotionPath содержит список всех точек пути одного пути.

Конечная форма траектории вычисляется с использованием линейной интерполяции или интерполяции сплайнами Катмулла-Рома на пути точек.

Создание MotionPath

Создайте объект Motionpath и добавьте в него точки пути.

MotionPath path = new MotionPath();
path.addWayPoint(new Vector3f(10, 3, 0));
path.addWayPoint(new Vector3f(8, -2, 1));
...

Вы можете настроить путь следующим образом.

Методы MotionPath  Применение
path.setCycle(true)  Устанавливает, должно ли движение по этому пути быть закрытым (true) или открытым (false).
path.addWayPoint(vector)  Добавляет отдельные точки пути к этому пути. Заказ будет актуален.
path.removeWayPoint(vector)
removeWayPoint(index) 
Удаляет точку пути из этого пути. Вы можете указать точку, которую вы хотите удалить как вектор или как целочисленный индекс.
path.setCurveTension(0.83f)  Устанавливает натяжение кривой (сплав Catmull-Rom). Значение 0.0f приводит к прямой линейной линии, 1.0 очень крутой кривой.
path.getNbWayPoints()  Возвращает количество точек пути в этом пути.
path.enableDebugShape(assetManager,rootNode)  Показывает линию, которая визуализирует путь. Используйте это во время разработки и отладки, чтобы увидеть, что вы делаете.
path.disableDebugShape()  Скрывает линию, которая визуализирует путь. Используйте это для сборки релиза.

MotionPathListener

Вы можете перехватывать взаимодействия в игре MotionPath. Зарегистрируйте MotionPathListener в MotionPath, чтобы отследить, достигнуты ли точки пути, и затем запустить пользовательское действие. Метод onWayPointReach() интерфейса дает вам доступ к объекту управления MotionEvent и целочисленное значение, представляющее текущий wayPointIndex.

В этом примере вы просто распечатываете статистику во всех точках. В игре вы можете запускать действия здесь: трансформации, анимации, звуки, игровые действия (атака, открытие двери и.т.д.).

path.addListener( new MotionPathListener() {
  public void onWayPointReach(MotionEvent control, int wayPointIndex) {
    if (path.getNbWayPoints() == wayPointIndex + 1) {
      println(control.getSpatial().getName() + " has finished moving. ");
    } else {
      println(control.getSpatial().getName() + " has reached way point " + wayPointIndex);
    }
  }
});

Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

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

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