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

Lemur Джемы # 3 — Выбор в Сцене

Опубликованно: 27.08.2017, 12:29
Последняя редакция, Andry: 28.08.2017 14:46

У Lemur есть надежная подсистема выбора(подбора), которая использует стандартный код луча столкновений JME. В этом Lemur Джем я добавляю простой выбор мышью в приложение, уже построенном в Lemur Джем # 1 и Lemur Джем # 2

Когда вы инициализируете GuiGlobals от Lemur, он автоматически добавляет MouseAppState, который делает выбор в сцене. Он также автоматически добавляет guiNode и rootNode корневые узлы сцены с которых осуществляется сбор. Эта демонстрация использует эту автоматическую настройку. Также можно использовать MouseAppState без остальных частей Lemur, но для простоты я не буду освещать это здесь.

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

Теперь создание куба выглядит следующим образом:

        for( int i = 0; i < 5; i++ ) {    
            Box b = new Box(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);
            geom.setLocalTranslation(-8 + i * 4, 0, -4);
   
            ...вырезаны настройки слушателей....

            rootNode.attachChild(geom);
        }

Итак, у нас будет ряд из 5 синих кубов стоящих перед нами. Для каждого из этих кубов я просто добавляю слушателя мыши:

    MouseEventControl.addListenersToSpatial(geom,
            new DefaultMouseListener() {
                @Override
                protected void click( MouseButtonEvent event, Spatial target, Spatial capture ) {
                    Material m = ((Geometry)target).getMaterial();
                    m.setColor("Color", ColorRGBA.Red);
                    if( event.getButtonIndex() == MouseInput.BUTTON_LEFT ) {
                        target.move(0, 0.1f, 0);
                    } else {
                        target.move(0, -0.1f, 0);
                    }                            
                }
                    
                @Override
                public void mouseEntered( MouseMotionEvent event, Spatial target, Spatial capture ) {
                    Material m = ((Geometry)target).getMaterial();
                    m.setColor("Color", ColorRGBA.Yellow);
                }

                @Override
                public void mouseExited( MouseMotionEvent event, Spatial target, Spatial capture ) {
                    Material m = ((Geometry)target).getMaterial();
                    m.setColor("Color", ColorRGBA.Blue);
                }                        
            });

Когда курсор мышь наводится на куб, это приводит к тому что куб окрашивается в желтый цвет. Если убрать курсор мыши с куба то тогда цвет переключается вновь на синий.

Если наведя курсор на куб щелкнут по нему, то он станет красным и поднимется или опустится на 0,1 единицы в зависимости от кнопки мыши которой был совершен клик.

Вот полный исходный код PickDemo.java

И вот короткое видео, демонстрирующее выше указанный код:

Смотрите так же:


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

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

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