如何将libgdx添加到现有项目中。

11

我提供了一个在安卓上制作的应用程序,它具有一个导航抽屉和其中的游戏列表。我必须创建另一个游戏并将其放入其中。我必须创建的游戏必须使用libGDX库,但原始应用程序没有使用此库。

是否可能实现这一点?如果是,请问如何将libGDX添加到现有项目中。在Github上,我只找到了如何使用libGDX启动新项目,而不是如何将其添加到现有代码中。谢谢。

2个回答

2

您可以通过以下两个步骤实现:

1. 将LibGDX添加到您的项目中

在您的Android Gradle文件中:build.gradle(应用程序或Android模块)

dependencies {
    ...

    // Add this line, it is recommended to use the latest LibGDX version
    api "com.badlogicgames.gdx:gdx-backend-android:1.9.10"
}

2、为视图初始化LibGDX或使用LibGDX管理的活动

选项1:为视图初始化
由于您拥有导航抽屉和更多原生于Android的代码,此选项更适合您的需求。根据此问题(如何将LibGDX添加为Android的子视图)

AndroidApplication类(扩展了Activity)有一个名为“initializeForView(ApplicationListener,AndroidApplicationConfiguration)”的方法,它将返回一个您可以添加到布局中的视图。

-- Matsemann

此外,此处有关于如何实现此选项(基于片段的LibGDX)的文档。

选项2:使用管理的活动
这是LibGDX的默认/最常见用法,您需要按如下方式更改您的代码:

  • 您的活动需要扩展Android应用程序:
public class MainActivity extends AndroidApplication {
  • 创建一个继承Game或ApplicationAdapter的类:
import com.badlogic.gdx.Game;

public class LibGDXGame extends Game {

    @Override
    public void create() {
        System.out.println("Success!");
    }
}
  • 初始化LibGDX管理的活动:
import android.os.Bundle;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;

public class MainActivity extends AndroidApplication {

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

你还需要将本地库复制到你的构建中。在使用Libgdx Setup GUI创建的项目的Android/build.gradle中有一个可以执行此操作的脚本。你还需要在gradle中指定Android本地库。 - Tenfour04
JNI代码怎么可能在没有库的情况下运行?当您调用initialize启动Gdx时,它会调用System.loadLibrary,如果适当的.so文件丢失,它将崩溃。 - Tenfour04
1
使用您的步骤(选项2),我遇到了一个异常: “Caused by: com.badlogic.gdx.utils.GdxRuntimeException:无法为目标加载共享库'gdx':Linux,32位 在com.badlogic.gdx.utils.SharedLibraryLoader.load(SharedLibraryLoader.java:125) 在com.badlogic.gdx.utils.GdxNativesLoader.load(GdxNativesLoader.java:33) ...由于:java.lang.UnsatisfiedLinkError:dlopen失败:需要或由“/ apex / com.android.runtime / lib / libnativeloader.so”打开的库“/ system / product / lib / libgdx.so”对于命名空间“ classloader-namespace”不可访问 - Sergio
是的,你说得对,我刚刚测试了我的第二个选项,它崩溃了,不知何故当我第一次回答这个问题时它还能工作,尽管在发布之前我已经尝试过。解决方案就是像Tenfour04所说的那样去做,可惜我从来没有这样做过,也不知道该怎么做。 - Luis Fernando Frontanilla
1
这是一个更新的链接,供任何寻找FragmentActivity(子视图)文档的人使用:https://libgdx.com/wiki/app/starter-classes-and-configuration - jbcaveman

1
通常而言,你想要的是可行的。我认为最好的选择是使用libgdx创建一个新项目并带有他们的GUI,然后手动合并所需的文件。

嗯...他们的项目有点大,他们从我的游戏中获取分数并将其放入某个数据库中。当我的游戏启动时,会使用他们提供的用户ID。我不确定开始一个新的libGDX项目是否是一个好主意,因为我只需要做我的游戏,所以我想知道是否可能将libGDX仅用于我的游戏,与他们的项目分开。 - ghita
到底发生了什么?谁正在创建libgdx部分,谁正在创建数据库,以及谁拥有需要将游戏集成在其中的应用程序? - seb-o-matic
我正在创建libdgx游戏,数据库和包含该游戏的应用程序由客户端提供。唯一的问题是是否可能仅在我的游戏中使用libgdx,而不是整个项目,并且如何确切地实现它。 - ghita
libGDX是一个依赖项,因此在应用程序发布时需要包含它,因为应用程序的一部分(即您的游戏)需要它来运行。应用程序的其余部分可以独立于libGDX和您添加的游戏运行。 - seb-o-matic
我以为你知道,当你向项目添加库时,它不会影响你已经拥有的代码。我的建议仍然是从头开始创建一个libgdx项目,然后提取你需要的文件。 - seb-o-matic
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接