2013-03-14 65 views
0

我有包含主類對象的依賴(與聽衆,在libgdx)

registerscreen = new registerScreen(this); 
emailRegisterscreen = new emailRegisterScreen(this); 

registerScreen包含emailButton,向監聽器,在構造函數中提出:

emailButton.addListener(new ClickListener() { 
     @Override 
     public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
      super.touchUp(event, x, y, pointer, button); 
      Gdx.app.log("registerscreen", "email clicked"); 
      gameHolder.setScreen(gameHolder.emailRegisterscreen); 
     } 
    }); 

gameHolder是主要的類。

現在,以上示例僅適用於在emailScreen之前初始化emailRegisterscreen(上面的代碼段不起作用)。我想知道是否有可能使它工作,並仍然首先定義寄存器屏幕?

我猜Java使用當前值gameHolder.emailRegisterscreen而不是對它的引用或其他東西。

+1

我不確定你到底在問什麼,它是否返回空指針異常?它什麼都不做?在調用touchUp方法時,匿名類將使用gameHolder的當前值。 – Jyro117 2013-03-14 21:09:53

+0

*「我在猜測Java使用'gameHolder.emailRegisterscreen'的當前值而不是引用它或其他東西。」*否,情況並非如此,Java在執行時使用該字段的值。所以註冊的順序(在你的示例代碼片段中)並不重要。我猜你的代碼還有其他問題。你可能想詳細說明什麼是不工作的,你是否有錯誤,是否沒有發生? – Veger 2013-03-15 09:05:03

回答

0

Aaaand我已經想通了。

我有一個線

Gdx.input.setInputProcessor(stage); 

在我的屏幕的兩個構造函數。這導致第二個屏幕覆蓋輸入處理器,而用戶正在顯示第一個屏幕。 (所以我沒有錯誤!)

修復:

@Override 
public void show() { 
    Gdx.input.setInputProcessor(stage); 
} 

將此添加到我的兩個屏幕。