1

因此,在 libgdx android 项目中,我们有一个包含 android 活动的文件夹和另一个包含 libgdx 项目源代码的文件夹。

要从我们使用的 Android 活动开始“游戏”initialize(new MyGdxGame(),cfg);

现在我需要知道如何从游戏中的 libgdx 类返回到主菜单之类的 android 活动...

我尝试从 Activity 扩展类以获取contextApplication,但我无法填写第二个参数,因为程序无法识别 libgdx 类中的 android 类...

4

4 回答 4

1

在 libGDX 项目中使用 Android 特定代码的标准方法是在 libGDX 核心项目(例如interface PlatformStuff)中创建一个独立于平台的接口,然后在每个特定于平台的后端(例如,桌面或 Android)中使用平台特定对象(so class AndroidPlatformStuff implements PlatformStuff)。您可以在构造接口时将接口的平台特定实现传递到通用代码中(例如,new MyGdxGame(new AndroidPlatformStuff()).

调用更改活动和上下文的 Android 代码可能需要更多的工作(因为它与 libGDX 基础架构有一点交互),但也应该是可行的。您应该能够使用集成广告支持的教程来获得基本概念。请参阅http://code.google.com/p/libgdx/wiki/AdMobInLibgdxhttp://code.google.com/p/libgdx/wiki/ApplicationPlatformSpecific

于 2013-01-03T18:19:29.557 回答
1

首先,您应该在核心文件夹中创建一个接口类。这通常与您的游戏类一起放置。例如,假设您的函数名称将是 LoginFacebook() 用于名为 ActionResolver 的接口类

接口类

package com.mygdx.game;

public  interface ActionResolver {
    public void LoginFacebook();

}

现在在你的游戏类中,你应该有以下构造函数:

public SpaceXplorerGame(ActionResolver actionResolver)
{
    this.actionResolver = actionResolver;
}

现在在你的 android 文件夹中,在 src -> com.mygdx.game.android (你的包名)中,你应该创建你的处理程序类,在我的例子中叫做 ActionResolverAndroid

public class ActionResolverAndroid implements ActionResolver {
    Handler handler;
    Context context;


    public ActionResolverAndroid(Context context) {
        handler = new Handler();
        this.context = context;
    }

public void LoginFacebook()
{
    handler.post(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(context, LoginActivity.class);
            context.startActivity(intent);
        }
    });

} 

}

现在从 LibGdx 调用函数 LoginFacebook() 将带你到你在 android 中的 LoginAcitivty.class。希望我没有错过任何东西

于 2017-11-01T00:18:11.900 回答
0

广告平台的 libGDX 文档正是您所需要的。它在 libGDX 核心中创建一个接口,并在 android 启动器中实现一个处理程序,该处理程序可以从核心部分调用。

见这里https ://github.com/libgdx/libgdx/wiki/Admob-in-libgdx

基本上跳过所有的广告内容。向下滚动到“控制”并执行以下部分:

  • 在您的 AndroidLauncher 中注册一个新的处理程序。这是必要的,因此处理程序可以稍后在正确的android线程中处理接口的实现功能......(参见“HelloWorldAndroid”)
  • 在您的核心项目中创建一个接口(如 IActivityRequestHandler)
  • 让您的 AndroidLauncher 实现该功能并使用处理程序在您的 android 线程中执行实际功能

最后,您需要传递对您的 libGDX 核心代码的引用。我个人通过在我的核心项目中实现一个单例类来使用它,如下所示:

class SingletonData{
  private SingletonData(){
  }
  private static SingletonData instance;
  public static SingletonData getInstance(){
    if(instance==null){
      instance = new SingletonData(); // can only be assessed here. no other class can generate a second instance
    }
    return instance;
  } 

  private IActivityRequestHandler handler;

  public void setHandler(IActivityRequestHandler handler){
    this.handler=handler;
  }

  public IActivityRequestHandler getHandler(){
    return this.handler;
  }
}

在您的 AndroidLauncher(即 HelloWorldAndroid)调用中,在它创建结束时调用以下内容来注册它

SingletonData.getInstance().setHandler(this);

现在你可以通过以下方式在任何你喜欢的核心类中使用它:

SingletonData.getInstance().getHandler().showAds(true); // showAds or whatever your interface handler implements

PS:确保在游戏开始后调用 getHandler(),这样你就不会得到空引用。

于 2019-05-06T21:17:48.980 回答
0

你应该创建回调;创建一个接口并在android类上实现,然后将其传递给libgdx,当您需要调用相关方法时。

于 2017-10-16T13:05:11.080 回答