如何刷新jMonkey中的所有输入事件

时间:2014-03-05 14:10:38

标签: java jmonkeyengine nifty-gui

我的游戏需要大约一分钟才能在Android中加载,直到出现第一个屏幕。直到加载时,jmonkey的输入管理器似乎排队所有输入,一旦我的第一个漂亮的屏幕加载,就会导致讨厌的行为(自动按钮点击)。

当场景加载时也是如此(按下相应的漂亮按钮需要一段时间)。尽管我在最后一个加载的应用程序状态中设置了映射和侦听器,但仍会发生这种情况。

有没有办法刷新所有以前的输入,我可以在将监听器添加到输入管理器之前和之后调用它?

我没有在update()中做太多工作并初始化我的appstates,但是我调用了nifty的OnClick()的一些函数(reinitialize()),加载场景中的所有场景和模型,因此需要一段时间。这是我的应用程序的伪代码

In Main.java {

// Nothing in SimpleUpdate()

// This app state contains
 stateManager.attach(new MainMenuAppState());
}
In MainMenuAppState.java  implements ScreenController  {

initialize() {
        niftyDisplay = new NiftyJmeDisplay(app.getAssetManager(), app.getInputManager(), app.getAudioRenderer(), app.getGuiViewPort());

        // Create a new nifty GUI object
        nifty = niftyDisplay.getNifty();
// attach a couple of more app states which also has nothing significant in update loop

// do some good computation
// attach 5 new APP STATES which does not have anything significant in update()

display the appropriate screen of nifty
}
onClick() {
 nifty.gotoScreen(“loadScreen”);

// appstate previously attached. they dont have anything significant in update.
// They have significant initialize methods.
app.enqueue(
            rgas.reInitialize(time,cameraLoc,cameraRot);
            maes.reInitialize(qId); // loads all the scene and models on screen
            nifty.gotoScreen(“hudScreen”);
            nifty.getScreen(“hudScreen”).findElementByName(“ConfirmModuleButton”).setFocus();
            ppes.reInitialize();   // this contains input mappings

);
}
}

2 个答案:

答案 0 :(得分:3)

如果有办法执行此操作,它将位于InputManager上,因此您可以查看API。你的问题可能是因为队列并不像你想象的那样真正排队。它可能不是输入事件的队列,而是响应事件而采取的动作队列。由于事件在更新循环运行之前不会处理,因此如果上传循环停止,它们将继续累积。

在应用程序加载完毕之前,您无法添加侦听器,然后会自动忽略任何事件。您也可以尝试使用自己的队列或类似方法来加载场景,以便一次加载一些东西,同时不会完全停止系统。

如果您尝试jME3论坛,您可能会对此问题得到更好的回复。那里有更多活跃的猴子,包括那些比我更了解输入系统的人:)

答案 1 :(得分:1)

我想Tim B所说的是你最好的选择。

但是,您可以尝试在适当的时间调用nifty.setIgnoreMouseEvents(true)nifty.setIgnoreKeyboardEvents(true)来关闭可能达到Nifty的任何事件的处理,并在以后再次启用。