我的游戏需要大约一分钟才能在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
);
}
}
答案 0 :(得分:3)
如果有办法执行此操作,它将位于InputManager
上,因此您可以查看API。你的问题可能是因为队列并不像你想象的那样真正排队。它可能不是输入事件的队列,而是响应事件而采取的动作队列。由于事件在更新循环运行之前不会处理,因此如果上传循环停止,它们将继续累积。
在应用程序加载完毕之前,您无法添加侦听器,然后会自动忽略任何事件。您也可以尝试使用自己的队列或类似方法来加载场景,以便一次加载一些东西,同时不会完全停止系统。
如果您尝试jME3论坛,您可能会对此问题得到更好的回复。那里有更多活跃的猴子,包括那些比我更了解输入系统的人:)
答案 1 :(得分:1)
我想Tim B所说的是你最好的选择。
但是,您可以尝试在适当的时间调用nifty.setIgnoreMouseEvents(true)
和nifty.setIgnoreKeyboardEvents(true)
来关闭可能达到Nifty的任何事件的处理,并在以后再次启用。