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

Модули

Опубликованно: 03.08.2017, 22:25
Последняя редакция, Andry: 03.08.2017 22:25
  • Мышь и сенсорная обработка
    • События мыши и события курсора
    • Прямое использование
    • Цель и захват
  • InputMapper
  • Поддержка стиля
  • Сетчатая библиотека
  • Версии объектов
  • Управление фокусом

Lemur построен поверх многих подмодулей, каждый из которых может использоваться самостоятельно без остальной части элементов GUI или других частей. Любой из них — полезные утилиты самостоятельно, но также может быть объединен по мере необходимости. В этом разделе описываются эти модули и как их настроить самостоятельно. Он также кратко обсудит, как и где дефолт Лемур устанавливает их.

Standard GUI Elements

Мышь и сенсорная обработка

События мыши и касания могут обрабатываться MouseAppState и TouchAppState (соответственно). Они могут быть настроены со списком корней сцены, чтобы выполнить сбор против, и различные события мыши и курсора будут доставлены в любой выбранный Пространственный, который имеет MouseEventControl или CursorEventControl.

Большинство приложений выбирают одно состояние приложения или другое в зависимости от среды; Например, MouseAppState для настольных компьютеров и TouchAppState для мобильных устройств. Эти два могут использоваться совместно, если система поддерживает оба типа событий (например, настольный компьютер с сенсорным экраном или планшет с мышью).

Для сенсорных событий мультитач поддерживается, если платформа поддерживает его (например, мобильные устройства), и состояние каждого пальца отслеживается отдельно для событий ввода / выхода, перетаскивания / отпускания и т. Д. Это означает, что без какой-либо специальной обработки такие вещи, как несколько Слайдеры можно перетаскивать одновременно несколькими пальцами.

События мыши и события курсора

В JME уже есть классы MouseEvent и MouseButtonEvent, и они были повторно использованы для доставки событий мыши в MouseEventControls. Однако часто слушателям событий полезно узнать больше о событии. У MouseEvent есть такие вещи, как положение экрана, и не будет включать ничего о местоположении 3D-щелчка или даже в окне просмотра, которое использовалось для выбора. CursorEvent исправит это, включив эту дополнительную информацию.

В общем, MouseEvents проще и для простых типов ввода / выхода / кликов он будет работать в 99% случаев. В других случаях, когда необходимо знать местоположение 3D-изображения, нормальную поверхность, настройку просмотра / камеры и т. Д., Следует использовать CursorEventControl.

Базовые свойства событий курсора:

  • Viewport: окно просмотра, в котором произошел выбор. MouseAppState и TouchAppState поддерживают множественные видовые экраны и собирают корни. Эта информация часто необходима для правильной интерпретации информации о наборе (например, при передаче событий через 2D-портал или при непроектировании трехмерной точки).
  • Target: пространство, которое было выбрано этим событием.
  • X, y: двумерное местоположение события.
  • Collision: реальный объект JME CollisionResult события pick. Включает фактическую геометрию, щелкнув по поверхности, и т. Д.

Прямое использование

Использование MouseAppState или TouchAppState в вашем приложении очень просто. Настройка для любого состояния приложения такая же, поэтому для краткости будет обсуждаться только MouseAppState.

Шаг 1: Прикрепите MouseAppState к вашему приложению во время инициализации. Например, в simpleInitApp () это будет выглядеть так:

public void simpleInitApp() {
    appStateManager.attach(new MouseAppState(this));
}

По умолчанию основной видовой экран приложения и графический интерфейс пользователя будут добавлены в качестве коллизий. Другими словами, выбор против графического интерфейса и 3D-сцены будет автоматически. Если вы хотите отключить это и добавить только окно просмотра и / или корни, просто вызовите setIncludeDefaultCollisionRoots (false) в созданной мыши или коснитесь состояния приложения.

Шаг 2: добавьте слушателей в свои пространственные объекты. (Да, это действительно так).

Для пространственного приема событий необходимо иметь либо MouseEventControl, либо CursorEventControl с зарегистрированными слушателями. Для каждого типа событий требуется только один элемент управления, поэтому некоторые удобства были добавлены, чтобы упростить настройку элемента управления. (То есть: он добавит только элемент управления, если необходимо, иначе повторное использование существующего).

Вот простой пример добавления прослушивателя событий мыши в пространственный:

MouseEventControl.addMouseListeners(spatial, new DefaultMouseListener() {
    @Override
    protected void click( MouseButtonEvent event, Spatial target, Spatial capture ) {
        System.out.println("I've been clicked:" + target);
    }
});

См. MouseListener javadoc для более подробной информации.

Цель и захват

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

  • Target: это фактическое пространственное получение этого события. Другими словами, курсор мыши или коснувшийся палец в настоящее время пересекают эту пространственную. Если событие потребляется каким-то слушателем, и это событие было событием кнопки (или касанием), то эта цель становится захватом для последующих событий.
  • Capture: для событий движения, это пространственная, которая начала все это. Захват — это пространственный объект, который первым получил событие, которое было уничтожено. Захваченные Spatials также всегда получают первую трещину в событиях движения мыши и активируют события. Они могут выбирать, чтобы не потреблять их, но они получают первую трещину.

Почему это полезно? Ну, по многим причинам.

Пример 1: Отмененный фокус. Например, когда пользователь нажимает на кнопку, а затем отталкивает мышь от нее, прежде чем отпускать кнопку, очень важно знать всю информацию. Лемур мог бы просто доставить все события перетаскивания в исходное «захваченное» пространство, но тогда слушатели событий могли бы выяснить, находилась ли мышь по этой кнопке, и если она должна продолжать выполнять действие этой кнопки или останавливаться. Кроме того, слушатель может захотеть узнать, где находится мышь.

Пример 2: перетаскивание. Когда щелкнул перетаскиваемый элемент, он может поглотить событие и стать захватом. Это будет первый прослушиватель, который получит любые последующие события до тех пор, пока не будет завершено перетаскивание … и он может не использовать эти события, даже если он их обрабатывает. Таким образом, объект перетаскивания получит эти события движения и перемещает перетаскиваемый объект. Если пользователь перетаскивает очень быстро, и мышь больше не пересекает перетаскиваемый объект, тогда он все равно получит события движения, потому что он «захвачен». Что еще более важно для drag-and-drop, если исходный прослушиватель не использует эти события, тогда они могут свободно распространяться на другие пространственные объекты, например контейнер для приема сбрасывания. Затем базовые объекты контейнера будут по-прежнему получать события ввода / вывода мыши и соответственно изменять их видимое состояние.

На самом деле, этот пример просто поцарапал поверхность, но нижняя строка заключается в том, что при операции перетаскивания важно продолжить доставку событий на объект с первоначальным щелчком, но также важны дополнительные события выбора. Параметры «захвата» и «цели» отражают это состояние.

InputMapper

В разработке.

Поддержка стиля

Модуль стиля может поддерживать общие «стилизованные» атрибуты для любых классов Java, а не только элементы базового GUI Лемура. В этом разделе обсуждается, как эта библиотека может использоваться для обычных классов Java или ваших собственных пользовательских элементов GUI, не связанных с Lemur. Документацию о создании стилей см. В документации по стилю.

В разработке.

Сетчатая библиотека

В разработке.

Версии объектов

В разработке.

Управление фокусом

В разработке.


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

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

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