【问题标题】:call Activity when click button on core game LibGDX单击核心游戏 LibGDX 上的按钮时调用 Activity
【发布时间】:2015-05-11 17:13:52
【问题描述】:

我在核心游戏上有一个按钮。我希望当我单击按钮时,将运行一个 Activity。我想我可以使用接口,但它不起作用。

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;

        }

还有安卓代码:

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);
    }

}

请帮帮我,非常感谢。

【问题讨论】:

  • 看起来应该可以正常工作。您是否将 Stage 设置为游戏的输入侦听器?此外,您应该使用 EventListener 而不是 ClickListener 的按钮。
  • @Tenfour04 谢谢。我将 My stage 设置为游戏的 inputlistener。我将 ClickListener 更改为 EventListener 但它仍然不起作用。我不明白,你能帮帮我吗?
  • 你需要澄清“不工作”。你能调试一下,看看你的方法是否被调用了吗?

标签: android button android-activity interface libgdx


【解决方案1】:

在 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;
                }
            });

如果您仅通过接口名称调用它,它将不起作用。

【讨论】:

  • 感谢 Aiman Batul,但当我调试您的代码时,mygame.myGameCallback= null
  • 再次检查我的答案。我已经解释过 mygame 是扩展游戏的游戏主类的类型。除非并且直到您不在每个其他类构造函数中初始化它的对象,否则您不能通过它的引用调用任何东西。只有在您没有这样做的情况下,Null 才会出现。
  • 这是我的错误,首先我忘记在 Manifest 上初始化我的活动,然后我修复了一些东西,当我看到我的错误时,每件事都很难。哈哈
猜你喜欢
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2015-07-05
相关资源
最近更新 更多