捆绑具有libGDX依赖项的资产

时间:2019-01-29 22:14:44

标签: libgdx dependencies project-structure

我正在libGDX之上为我计划制作的许多类似游戏制作纸牌游戏引擎。这是我计划的结构:每个游戏都是一个单独的项目,而引擎是添加到core模块中的依赖项。引擎本身将拥有很多资源,例如卡精灵和其他UI元素,它们也必须包含在内。

如何使该结构起作用?有什么办法可以使依赖包括资产?另一种方法是为每个游戏复制所有资产,我认为这不是非常有效。默认情况下,资产也位于android模块中,而引擎依赖项不包含这些资产(引擎是单个模块)。我将资产放在引擎模块中的什么位置?

2 个答案:

答案 0 :(得分:1)

像libgdx一样做。类路径中包含资产,例如arial-15.fnt,位于核心项目中,位于gdx / src / com / badlogic / gdx / utils /。看看BitmapFont的无参数构造函数如何被引用。

答案 1 :(得分:1)

我们的设置似乎与您上面概述的设置类似,项目与资产之间存在“多对一”的关系。这是解决该问题的一种潜在方法。

基本思想是:

  1. 具有单个权威资产文件夹
  2. 让各个项目在构建时将此文件夹复制到其构建输出中
  3. 通过执行项目的编译任务dependsOn或成为finalizedBy复制任务来完成此任务。
  4. 将资产复制到libgdx的内部File API查找特定类型项目的位置,以确保Android和其他项目感到满意。 (例如,Android项目会自动获取assets/之前提供的URI之前的Gdx.files.internal()。此步骤更多地取决于您的个人文件结构,因此可能需要稍作调整才能获得正确的路径所有项目,但不要气!!

旁注:Gradle应该自动跟踪资产目录是否实际更改。如果未进行任何更新,则复制任务将有效地变为无操作,这将大大提高非首次运行的构建速度。显然,如果您像我在下面提到的那样执行cleanAssets,则此方法将不适用。

这种方法的优点(无论如何对我来说)是,它不再依赖跨项目链接或时髦的类路径操作。它只是真实目录中的真实文件。缺点是它增加了使用的磁盘空间,因为在各个项目中可以有资产的多个物理副本。

以下不是一个完整的示例,但希望可以给您足够的经验。

正在执行复制任务的示例。该特定任务从“核心”项目中获取资产目录,并将其复制到android项目中。

android/build.gradle

task copyAssets(type: Copy) {
    from "../core/assets"
    into "./assets"
}

如何使android项目的构建依赖于此任务的示例:

android/build.gradle

afterEvaluate { project ->
    project.tasks.preDebugBuild {
        dependsOn copyAssets
    }

    project.tasks.preReleaseBuild {
        dependsOn cleanAssets
        finalizedBy copyAssets
    }
}

您会注意到在preReleaseBuild中,我还添加了一个cleanAssets任务。在生产过程中清理所有垃圾并进行新的复制始终是一个好主意。 cleanAssets只是一个基本的删除任务。

非Android项目的复制任务依赖项示例:

build {
    finalizedBy copyAssets
}

如果您仍然遇到困难,请告诉我在哪里,我会尽力帮助您。

相关问题