绑定具有libGDX依赖项的资产

绑定具有libGDX依赖项的资产,libgdx,dependencies,project-structure,Libgdx,Dependencies,Project Structure,我正在为我计划制作的许多类似游戏在libGDX之上制作一个纸牌游戏引擎。下面是我的计划结构:每个游戏都是一个单独的项目,引擎是添加到核心模块的依赖项。引擎本身将有很多资产,如卡片精灵和其他UI元素,它们也需要包括在内 我怎样才能使这个结构工作?有没有办法让依赖项包含其资产?另一种方法是复制每个游戏的所有资产,我认为这不是很有效。此外,默认情况下,这些资产位于android模块中,这是引擎依赖项没有的(引擎是单个模块)。我应该将资源放在引擎模块中的什么位置?像libgdx那样操作。类路径中包括一些

我正在为我计划制作的许多类似游戏在libGDX之上制作一个纸牌游戏引擎。下面是我的计划结构:每个游戏都是一个单独的项目,引擎是添加到
核心
模块的依赖项。引擎本身将有很多资产,如卡片精灵和其他UI元素,它们也需要包括在内


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

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

像libgdx本身那样操作。类路径中包括一些资产,比如位于核心项目gdx/src/com/badlogic/gdx/utils/中的arial-15.fnt。看看
BitmapFont
的无参数构造函数是如何引用的。

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

基本思想是:

android/build.gradle

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

    project.tasks.preReleaseBuild {
        dependsOn cleanAssets
        finalizedBy copyAssets
    }
}
build {
    finalizedBy copyAssets
}
  • 拥有一个单一的权威资产文件夹
  • 让各个项目在生成时将此文件夹复制到其生成输出
  • 通过让项目的编译任务
    dependsOn
    或由复制任务
    完成来完成这一点
  • 通过将资产复制到libgdx的内部文件api查找特定类型项目的位置,确保Android和其他项目满意。(例如,android项目会自动在提供给
    Gdx.files.internal()
    的URI前面添加一个
    assets/
    。这一步更依赖于您的个人文件结构,因此可能需要稍加调整才能使所有项目的路径正确,但不要气馁
  • 旁注: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
        }
    }
    
    build {
        finalizedBy copyAssets
    }
    
    您会注意到,在preReleaseBuild中,我还添加了一个
    cleanAssets
    任务。在生产构建过程中,清除任何垃圾并进行新拷贝总是一个好主意。
    cleanAssets
    只是一个基本的删除任务

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

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

    如果您仍有困难,请告诉我您的位置,我会尽力帮助您。

    我们的设置与您在上文中概述的项目与资产的“多对一”关系类似。下面是一种可能的方法

    基本思想是:

    android/build.gradle
    
    afterEvaluate { project ->
        project.tasks.preDebugBuild {
            dependsOn copyAssets
        }
    
        project.tasks.preReleaseBuild {
            dependsOn cleanAssets
            finalizedBy copyAssets
        }
    }
    
    build {
        finalizedBy copyAssets
    }
    
  • 拥有一个单一的权威资产文件夹
  • 让各个项目在生成时将此文件夹复制到其生成输出
  • 通过让项目的编译任务
    dependsOn
    或由复制任务
    完成来完成这一点
  • 通过将资产复制到libgdx的内部文件API查找特定类型项目的位置,确保Android和其他项目满意。(例如,Android项目自动在提供给
    Gdx.files.internal()的URI前面添加
    assets/
    。这一步更依赖于您的个人文件结构,因此可能需要稍作调整才能使所有项目的路径正确,但不要气馁
  • 旁注: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
        }
    }
    
    build {
        finalizedBy copyAssets
    }
    
    您会注意到,在preReleaseBuild中,我还添加了一个
    cleanAssets
    任务。在生产构建过程中,清除任何垃圾并进行新拷贝总是一个好主意。
    cleanAssets
    只是一个基本的删除任务

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

    android/build.gradle
    
    afterEvaluate { project ->
        project.tasks.preDebugBuild {
            dependsOn copyAssets
        }
    
        project.tasks.preReleaseBuild {
            dependsOn cleanAssets
            finalizedBy copyAssets
        }
    }
    
    build {
        finalizedBy copyAssets
    }
    
    如果您仍有困难,请告诉我您在哪里,我会尽力帮助您。

    您的项目是一个渐变项目吗