求助:LibGDX游戏资源修改无法同步至运行中桌面实例
解决方案
1. 调整Gradle资源同步策略(推荐)
在桌面模块的build.gradle文件中,添加实时同步资源的任务,确保assets/data目录的修改能自动同步到desktop/build/resources/main/data,无需手动复制:
task syncAssets(type: Copy) { from project.rootDir.path + '/assets/data' into 'build/resources/main/data' include '**/*' } // 让资源处理任务依赖同步任务,同时监听资源变化 processResources.dependsOn syncAssets gradle.taskGraph.whenReady { graph -> if (graph.hasTask(':desktop:run')) { syncAssets.configure { inputs.files fileTree(dir: project.rootDir.path + '/assets/data') outputs.dir 'build/resources/main/data' doLast { println "Assets synced successfully" } } // 开启增量同步,仅复制变化的文件 syncAssets.incremental = true // 启动游戏前自动执行同步 tasks.whenTaskAdded { task -> if (task.name == 'run') { task.doFirst { syncAssets.execute() } } } } }
修改后重新同步Gradle,启动游戏实例时会自动同步资源,后续修改assets/data内的文件后,只需重启关卡即可重载最新内容。
2. 直接从项目原资源目录加载
修改DesktopLauncher中的资源加载逻辑,让游戏直接读取项目根目录下的assets/data,绕过build目录的缓存:
public class DesktopLauncher { public static void main (String[] arg) { LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); // 获取项目根目录下assets/data的绝对路径 String assetsPath = new File("assets/data").getAbsolutePath(); // 自定义文件解析器,指向原资源目录 FileHandleResolver resolver = path -> new FileHandle(new File(assetsPath, path)); // 替换默认资源管理器 Gdx.files.setFileHandleResolver(resolver); new LwjglApplication(new YourGame(), config); } }
这种方式下,修改assets/data的文件后,重启关卡会直接读取最新文件,无需依赖Gradle同步。注意发布打包时,需改回默认资源加载方式,或确保打包流程将assets/data正确打包到Jar中。
3. 关闭Gradle构建缓存
Android Studio 2024.3.1默认启用的Gradle构建缓存可能导致资源未及时更新,可尝试关闭:
- 打开
gradle.properties文件,添加或修改:org.gradle.caching=false - 同步Gradle后重启游戏实例,后续修改资源时,Gradle会重新复制资源到build目录,重启关卡即可生效。
内容的提问来源于stack exchange,提问作者Jaggie
相关产品推荐
相关产品推荐

