Изящный Gui не реагирует на ввод

Доброе утро! Я пытаюсь Nifty Gui с Slick2d. Все работает правильно, кроме входного опроса Nifty Gui. Это не реагирует на все! Вот часть моего кода:

Xml:

<nifty xmlns="http://nifty-gui.lessvoid.com/nifty-gui">
    <screen id="GamePlay" controller="GamePlayScreenController">
        <layer childLayout="vertical">
            <panel id="roomListPanel" width="100%" height="32px" 
            childLayout="absolute-inside" padding="5px">

                <control id="appendButton" name="button" label="Pause">
            <interact onClick="test()" />       
        </control>
            </panel>
        </layer>
    </screen>
</nifty>

Джава:

class GamePlayScreenController implements ScreenController {
    public void bind(Nifty nifty, Screen screen) {
        System.out.println("Bind");
    }

    public void onEndScreen() {
        System.out.println("End");
    }

    public void onStartScreen() {
        System.out.println("Start");
    }

    public void test() {
        System.out.println("Test");
    }
}

... 

// In my state class:

this.nifty = new Nifty(new LwjglRenderDevice(), new NullSoundDevice(),       new LwjglInputSystem(), new TimeProvider());

this.nifty.loadStyleFile("nifty-default-styles.xml");
this.nifty.loadControlFile("nifty-default-controls.xml");
this.nifty.registerScreenController(new GamePlayScreenController());
this.nifty.fromXml("data/test.xml", "GamePlay");
this.nifty.gotoScreen("GamePlay");

...

this.nifty.update();

... 

SlickCallable.enterSafeBlock();
this.nifty.render(false);
SlickCallable.leaveSafeBlock();

У меня нет идей, почему это не так. Пожалуйста помоги! Спасибо!

2 ответа

Решение

Это должно работать для вас:

    protected void initGameAndGUI(GameContainer arg0, StateBasedGame arg1) {

    LwjglInputSystem inputSystem = new LwjglInputSystem();

    try {
        inputSystem.startup();
    } catch (Exception e) {
        e.printStackTrace();
    }           
    PlainSlickInputSystem psis = new PlainSlickInputSystem();
    GameClient.app.getInput().addListener(psis);    

    prepareNifty(nifty, arg1);
    nifty = new Nifty(new LwjglRenderDevice(), new NullSoundDevice(),psis, new AccurateTimeProvider());
    NullSoundDevice(),psis, new AccurateTimeProvider());    
    initNifty(arg0, arg1, psis);    
    nifty.fromXml("...");

}

и конечно

nifty.update();

в вашем методе обновления.

Я использовал интеграцию Slick2d Nifty.

Вы вообще вызывали метод startup() в LwjglInputSystem? У нас есть пример кода, доступного здесь о том, как это должно быть вызвано. Это необходимо для правильной инициализации LwjglInputSystem.

Однако, почему бы вам не использовать готовые классы интеграции Slick2d, которые мы предлагаем здесь: Slick2d Nifty-GUI классы? Они могут лучше подходить для простой интеграции Nifty GUI с Slick2d, вместо того чтобы полагаться на LWJGL напрямую.

Другие вопросы по тегам