我正在libGDX之上为我计划制作的许多类似游戏制作纸牌游戏引擎。这是我计划的结构:每个游戏都是一个单独的项目,而引擎是添加到core
模块中的依赖项。引擎本身将拥有很多资源,例如卡精灵和其他UI元素,它们也必须包含在内。
如何使该结构起作用?有什么办法可以使依赖包括资产?另一种方法是为每个游戏复制所有资产,我认为这不是非常有效。默认情况下,资产也位于android
模块中,而引擎依赖项不包含这些资产(引擎是单个模块)。我将资产放在引擎模块中的什么位置?
答案 0 :(得分:1)
像libgdx一样做。类路径中包含资产,例如arial-15.fnt,位于核心项目中,位于gdx / src / com / badlogic / gdx / utils /。看看BitmapFont
的无参数构造函数如何被引用。
答案 1 :(得分:1)
我们的设置似乎与您上面概述的设置类似,项目与资产之间存在“多对一”的关系。这是解决该问题的一种潜在方法。
基本思想是:
dependsOn
或成为finalizedBy
复制任务来完成此任务。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
}
如果您仍然遇到困难,请告诉我在哪里,我会尽力帮助您。