2015-05-11 34 views
1

我在Core遊戲上有一個按鈕。我希望當我點擊按鈕時,一個活動將運行。我認爲我可以使用接口,但它不工作。打電話在覈心遊戲LibGDX上點擊按鈕時的活動

buttonPost.addListener(new ClickListener(){ 

      @Override 
      public void clicked(InputEvent event, float x, float y) { 
       myGameCallback.startActivity(); 

      } 
     }); 

這裏是我的接口

public interface MyGameCallback{ 
      public void startActivity(); 
     } 

     private MyGameCallback myGameCallback; 

     public void setMyGameCallback(MyGameCallback callback){ 
      myGameCallback=callback; 

     } 

和Android代碼:

public class MainActivity extends AndroidApplication implements Main.MyGameCallback { 

    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 

     Main main=new Main(); 
     main.setMyGameCallback(this); 

     initialize(main, config); 
    } 

    @Override 
    public void startActivity() { 
     Intent intent = new Intent(this, Post.class); 
     startActivity(intent); 
    } 

} 

請幫幫我,謝謝你這麼多。

+1

看起來應該可以正常工作。你是否將舞臺設置爲遊戲的輸入監聽器?另外,您應該使用EventListener而不是ClickListener來實現按鈕。 – Tenfour04

+0

@ Tenfour04謝謝。我將我的舞臺設置爲遊戲的輸入畫面。我將ClickListener更改爲EventListener,但它仍然不起作用。我不明白,你能幫我嗎? – ThinhTrinh

+1

你需要澄清「不要工作」。你能調試,看看你的方法是否被稱爲? – Tenfour04

回答

3

在LIBGDX中實現一些原生android功能的接口方法的工作原理如下。
首先爲什麼你的主類實現屏幕?據我所知,主類應該實現遊戲。屏幕與主類不同。 所以在這裏你去接口。

public interface MyGameCallback{ 
      public void startActivity(); 
     } 

在AndroidLauncher

public class AndroidLauncher extends AndroidApplication implements 
    MyGameCallback{ 

// provide implementation of startActivity(); method. 

} 

最後遊戲主類應該像

public class MainGame extends Game { 


    public MyGameCallback myGameCallback; 



    public MainGame(MyGameCallback myGameCallback) { 
     super(); 
     this.myGameCallback = myGameCallback; // initialize in constructor 

    } 

最後上的按鈕在遊戲,你要開始你的活動不喜歡它。

public class MainMenuScreen implements Screen { 

private MainGame mygame; 

    public MainmenuScreen(MainGame game) { // initiaize maingame class so that you can call Interface method by its reference 

this.mygame = game; 
} 

///////////////////////////////////

最後在您的按鈕請撥打方法

buttonPost=new TextButton("Post",skin); 
      buttonPost.pad(20); 
      buttonPost.addListener(new EventListener() { 

       @Override 
       public boolean handle(Event event) { 
        mygame.myGameCallback.startActivity(); 
        return true; 
       } 
      }); 

如果您只是通過接口名稱調用它,它將無法正常工作。

+0

感謝Aiman Batul,但是當我調試你的代碼時,mygame.myGameCallback = null – ThinhTrinh

+0

再次檢查我的答案。我已經解釋過,mygame是擴展遊戲的遊戲主類的類型。除非直到你不在其他類的構造函數中初始化它的對象,否則你不能通過它的引用調用任何東西。如果你沒有這樣做,那麼只能在那裏。 –

+0

感謝所有,它的工作。 – ThinhTrinh

相關問題