代码之家  ›  专栏  ›  技术社区  ›  Nicolas

绑定具有libGDX依赖项的资产

  •  0
  • Nicolas  · 技术社区  · 7 年前

    我正在为我计划制作的许多类似游戏在libGDX之上制作一个纸牌游戏引擎。下面是我的计划结构:每个游戏都是一个单独的项目,引擎是添加到 core

    我怎样才能使这个结构工作?有没有办法让依赖项包含其资产?另一种方法是复制每个游戏的所有资产,我认为这不是很有效。此外,这些资产在 android 默认情况下,引擎依赖项没有该模块(引擎是单个模块)。我应该将资源放在引擎模块的何处?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Harvtronix    7 年前

    我们有一个类似于您上面概述的设置,即项目与资产之间的“多对一”关系。这里有一个潜在的解决方法。

    1. 拥有一个单一的权威资产文件夹
    2. 让各个项目在生成时将此文件夹复制到其生成输出
    3. 通过拥有项目的编译任务来实现这一点 dependsOn finalizedBy 复制任务。
    4. 通过将资产复制到libgdx的内部文件api查找特定类型项目的位置,确保Android和其他项目满意。(例如,android项目会自动获得 assets/ 在提供给的URI前面加上前缀 Gdx.files.internal() . 这一步更依赖于您的个人文件结构,因此可能需要稍加调整才能使所有项目的路径正确,但不要气馁!

    旁注:Gradle应该自动跟踪资产目录是否实际更改。如果没有更新任何内容,那么复制任务实际上将变为无操作,对于非首次运行,这将大大加快构建速度。显然,如果你做一个 cleanAssets 就像我在下面提到的,这不适用。

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

    下面不是一个完整的例子,但希望能给你足够的参考。

    这个特殊的目录从一个“核心”项目中获取一个资产目录,并将其复制到一个android项目中。

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

    android/build.gradle
    
    afterEvaluate { project ->
        project.tasks.preDebugBuild {
            dependsOn copyAssets
        }
    
        project.tasks.preReleaseBuild {
            dependsOn cleanAssets
            finalizedBy copyAssets
        }
    }
    

    你会注意到在预发布版本中我添加了一个 任务也是如此。在生产构建过程中,清除任何垃圾并进行新的复制总是一个好主意。 清洁资产

    非android项目的复制任务依赖关系示例:

    build {
        finalizedBy copyAssets
    }
    

    如果你仍然被困住,告诉我在哪里,我会尽力帮助你。

        2
  •  1
  •   MrStahlfelge    7 年前

    像libgdx自己那样做。类路径中包括一些资产,比如位于核心项目gdx/src/com/badlogic/gdx/utils/中的arial-15.fnt。看看 BitmapFont