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

Java 如何刷新jMonkey中的所有输入事件,java,jmonkeyengine,nifty-gui,Java,Jmonkeyengine,Nifty Gui,我的游戏在android上加载大约需要一分钟,直到第一个屏幕出现。在加载之前,jmonkey的输入管理器似乎会在我第一个漂亮的屏幕加载时将所有导致恶劣行为(自动点击按钮)的输入排队 加载场景时也会发生同样的情况(再次按下相应的漂亮按钮需要一段时间)。尽管我在加载的最后一个应用程序状态中设置了映射和侦听器,但仍然会发生这种情况 是否有一种方法可以刷新我可以在将侦听器添加到输入管理器之前和之后调用的所有以前的输入 我在update()和初始化appstates方面没有做太多工作,但是我调用了nift

我的游戏在android上加载大约需要一分钟,直到第一个屏幕出现。在加载之前,jmonkey的输入管理器似乎会在我第一个漂亮的屏幕加载时将所有导致恶劣行为(自动点击按钮)的输入排队

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

是否有一种方法可以刷新我可以在将侦听器添加到输入管理器之前和之后调用的所有以前的输入

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

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

);
}
}

如果有办法做到这一点,它将出现在
InputManager
上,因此您可以查看API。您的问题可能是,按照您的思维方式,队列并不是真正的队列。它可能不是输入事件队列,而是响应事件而采取的操作队列。由于事件在更新循环运行之前不会处理,因此如果上载循环停止,它们将继续累积

在应用程序完成加载之前,您不能简单地添加侦听器,那么任何事件都将被自动忽略。您还可以尝试使用自己的队列或类似队列中断场景加载,一次加载一点内容,同时不完全停止系统


如果您尝试jME3论坛,您可能会在这个问题上得到更好的回答。那里活跃的猴子比这里多,其中包括比我更了解输入系统的人:)

如果有办法做到这一点,它将出现在
InputManager
上,因此您可以查看API。您的问题可能是,按照您的思维方式,队列并不是真正的队列。它可能不是输入事件队列,而是响应事件而采取的操作队列。由于事件在更新循环运行之前不会处理,因此如果上载循环停止,它们将继续累积

在应用程序完成加载之前,您不能简单地添加侦听器,那么任何事件都将被自动忽略。您还可以尝试使用自己的队列或类似队列中断场景加载,一次加载一点内容,同时不完全停止系统


如果您尝试jME3论坛,您可能会在这个问题上得到更好的回答。那里活动的猴子比这里多,包括比我更了解输入系统的人:)

我想蒂姆B说的是你最好的选择


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

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

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