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

Lemur Джемы # 2 — Сопоставления ввода, делегирование

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

В предыдущем уроке Lemem Джем # 1 я говорил о настройке движения камеры с помощью класса Лемура InputMapper.

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

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

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

Я думаю, что код, вероятно, говорит сам за себя: CameraToggleState.java

public class CameraToggleState extends BaseAppState {

public static final FunctionId F_CAMERA_TOGGLE = new FunctionId("Camera Toggle"); 

private InputMapper inputMapper;

public CameraToggleState() {
}

public void toggleCamera() {
    CameraMovementState state = getState(CameraMovementState.class);
    state.setEnabled(!state.isEnabled());
}

@Override
protected void initialize(Application app) {
    
    // Настройка сопоставлений ввода, настроенных в конструкторе
    inputMapper = GuiGlobals.getInstance().getInputMapper();

    // Сопоставим клавишу пробел с нашей функцией
    inputMapper.map(F_CAMERA_TOGGLE, KeyInput.KEY_SPACE);
}

@Override
protected void cleanup(Application app) {
}

@Override
protected void enable() {
    // Регистрировать сами для вызова при срабатывании функции
    inputMapper.addDelegate(F_CAMERA_TOGGLE, this, "toggleCamera");
}

@Override
protected void disable() {
    inputMapper.removeDelegate(F_CAMERA_TOGGLE, this, "toggleCamera");
}
}

Просто прикрепите это состояние к app, и он будет переключать включенное состояние CameraMovementState всякий раз, когда игрок нажимает пробел.

main демо было настроено так: Main.java

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


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

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

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