0

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

当场景加载时也会发生同样的情况(再次按下适当的漂亮按钮需要一段时间)。尽管我在最后一个加载的 App State 中设置了映射和侦听器,但还是会发生这种情况。

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

我在更新()和初始化我的应用程序状态方面没有做太多工作,但是我在漂亮的 OnClick()上调用的一些函数(重新初始化())加载了场景图中的所有场景和模型,因此需要一段时间。这是我的应用程序的伪代码

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

);
}
}
4

2 回答 2

3

如果有办法做到这一点,它会在,InputManager所以你可以查看 API。您的问题可能是队列并不是您所想的真正的队列。可能它不是输入事件队列,而是响应事件而采取的动作队列。由于事件在更新循环运行之前不会处理,因此如果上传循环停止,它们将继续建立。

在应用程序完成加载之前,您可以简单地不添加侦听器,然后任何事件都将被自动忽略。您还可以尝试使用您自己的队列或类似的方式来打破场景加载,以便一次加载一些内容,同时不会完全停止系统。

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

于 2014-03-05T14:21:14.817 回答
1

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

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

于 2014-03-06T23:26:29.113 回答