2014-03-05 23 views
0

我的遊戲需要大約一分鐘才能在android中加載,直到出現第一個屏幕。直到它的加載時間,jmonkey的輸入管理器似乎排隊所有輸入,導致討厭的行爲(自動按鈕點擊),只要我的第一個漂亮的屏幕加載。如何刷新jMonkey中的所有輸入事件

場景加載時(同樣按下相應的漂亮按鈕需要一段時間)也是如此。儘管我在加載的最後一個應用程序狀態中設置了映射和偵聽器,但這仍然發生。

是否有一種方法可以刷新之前和之後添加偵聽器到輸入管理器之前調用的所有先前輸入? (),並初始化我的應用程序,但我調用漂亮的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 

); 
} 
} 

回答

3

的僞代碼如果有一種方法可以做到這一點,將在InputManager所以你可以檢查出的API。你的問題可能是,雖然隊列並不像你想的那樣是一個隊列。可能它不是輸入事件的隊列,而是響應事件而採取的一系列操作。由於事件在更新循環運行之前不會處理,因此如果上傳循環停滯,它們將繼續積累。

在應用程序完成加載之前,您可以不添加偵聽器,然後任何事件都會自動被忽略。你也可以嘗試使用隊列或類似的隊列來加載場景,以便一次加載一些東西,而不是完全拖延系統。

如果您嘗試jME3論壇,您可能會對此問題得到更好的回覆。在那裏有更多的猴子比這裏更活躍,包括比我更詳細的輸入系統知識的人:)

1

我想Tim B說的是你最好的選擇。

但是,您可以在某個適當的時間嘗試撥打nifty.setIgnoreMouseEvents(true)nifty.setIgnoreKeyboardEvents(true)來關閉處理可能觸及Nifty的事件並在以後再次啓用它。