2014-02-17 29 views
0

所以在菜單中我有3個按鈕,所有的代碼都是相同的。對於主題唯一重要的事情是如何清除libgdx監聽器

button2.addListener(new InputListener() { 
    @Override 
    public boolean touchDown(InputEvent event, float x, float y, 
    int pointer, int button) { 
     game.setGame(); 
     dispose(); 
    return true; 
    } 
}); 

那麼一切都是細下去,直到:

button3.clearListeners(); // MainMenu.java:174 line in exeption 

然後exeption彈出:

Exception in thread "LWJGL Application" java.lang.IllegalStateException: Invalid between begin/end. 
at com.badlogic.gdx.utils.DelayedRemovalArray.clear(DelayedRemovalArray.java:125) 
at com.badlogic.gdx.scenes.scene2d.Actor.clearListeners(Actor.java:261) 
at com.racostyle.avdelux.MainMenu.dispose(MainMenu.java:174) 
at com.racostyle.avdelux.MainMenu$3.touchDown(MainMenu.java:123) 
at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:55) 
at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:165) 
at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:136) 
at com.badlogic.gdx.scenes.scene2d.Stage.touchDown(Stage.java:277) 
at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:300) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:200) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114) 

編輯:如果我不刪除監聽器它們仍然是活躍的,可以點擊,並且可以免除。

回答

2

它看起來像你的聽衆actor.touchdown中調用MainMenu.disposeMainMenu.dispose清除按鈕上的所有偵聽器。 LIBGX不會允許這樣做。

爲什麼?因爲LIBGDX正在調用很多演員的觸摸事件。您真的不希望您的遊戲功能有所不同,具體取決於順序按鈕添加到您的舞臺。

所以,在其他地方打電話給清楚的聽衆。

由於您在dispose方法中執行此操作,無論如何,我建議不要刪除您的按鈕監聽器,因爲您註冊監聽器的actor不應再次使用。

+0

問題是如果聽衆保持他們仍然活躍。所以當下一個屏幕加載時,它們可以點擊 – raco

+0

這隻有當你的演員在屏幕之間共享時纔會發生。我建議不要在屏幕之間分享演員。如果您必須在屏幕之間共享演員,請在您首次開始顯示新屏幕時嘗試清除所有演員的聽衆。 –

+0

它不應該被共享。每個屏幕都有自己的「對象」。另外我剛剛嘗試刪除監聽器時創建新屏幕,但仍然存在相同的問題。 – raco

-1

不允許只調用不帶事件的clearListeners();

請問您發佈的代碼中的jsfiddle ..我會嘗試調試它,並添加一些代碼.. 謝謝..

+0

因爲我看到jsfiddle是爲JavaScript而不是爲Java? 但對於那些明確的聽衆。它清除所有其他偵聽器,所以在button1和button2中。問題只是在最後一個,點擊/觸及 – raco

+0

可能問什麼是按鈕3做?它會退出一切正確 –

+0

按鈕通過骨幹類調用新的屏幕(擴展遊戲類)並刪除當前屏幕。但沒有問題。問題是,如果我離開那個聽衆垃圾收集器不會刪除它們(我已經嘗試過),所以我有屏幕上的「鬼按鈕」,因此我不能讓觸摸事件繼電器的運動。 – raco