Nifty Gui 对输入没有反应
Nifty Gui doesn't react to input
早上好!
我正在尝试使用 Slick2d 的 Nifty Gui。除了 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>
Java:
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();
我不知道为什么没有。请帮忙!谢谢!
您是否致电 startup() method at all on then LwjglInputSystem? We have example code available here 了解其名称。这是正确初始化 LwjglInputSystem 所必需的。
但是,您为什么不使用我们在此处提供的现成 Slick2d 集成 类:Slick2d Nifty-GUI classes?它们可能更适合轻松地将 Nifty GUI 与 Slick2d 集成,而不是直接依赖 LWJGL。
这应该适合你:
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 集成。
早上好! 我正在尝试使用 Slick2d 的 Nifty Gui。除了 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>
Java:
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();
我不知道为什么没有。请帮忙!谢谢!
您是否致电 startup() method at all on then LwjglInputSystem? We have example code available here 了解其名称。这是正确初始化 LwjglInputSystem 所必需的。
但是,您为什么不使用我们在此处提供的现成 Slick2d 集成 类:Slick2d Nifty-GUI classes?它们可能更适合轻松地将 Nifty GUI 与 Slick2d 集成,而不是直接依赖 LWJGL。
这应该适合你:
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 集成。