我已成功将我的游戏编译为带有标志的 WASM:
EMCC_CFLAGS="-sUSE_GLFW=3 -sGL_ENABLE_GET_PROC_ADDRESS -sASYNCIFY -sASSERTIONS --preload-file src/resources" 货物构建 --release --target=wasm32-unknown-emscripten
但是,从浏览器打开游戏时立即崩溃,并出现错误:
WARNING: FILEIO: [src/resources/image.png] Failed to open file
thread 'main' panicked at src/main.rs:126:58:
could not load background image: "Image data is null. Either the file doesnt exist or the image type is unsupported."
这意味着浏览器无法加载这些图像,在我的代码中加载的图像如下:
let sh_walk =
Image::load_image("src/resources/walk.png").expect("could not load background image");
在二进制文件中运行的 WASM 编译游戏中如何加载资产?我正在考虑在运行时通过 HTTP 拉取图像,并在本地使用常规加载。
我已经将“src/resources”文件夹添加到 Web 服务器根目录,它们会在浏览器中加载,但 WASM 二进制文件不会拾取它。
解决方案是使用 EMCC_CFLAGS="-sUSE_GLFW=3 -sGL_ENABLE_GET_PROC_ADDRESS -sASYNCIFY -sASSERTIONS --embed-file src/resources" Cargo build --release --target=wasm32-unknown-emscripten 进行编译
这将使用 Emscripten 的模拟文件系统,它基本上是捆绑在 .data 文件中的所有资源。