坏蛋Dan
知乎@坏蛋Dan
发布时间:2024.1.4

前言

昨天我们完善和优化了我们的扫雷小游戏

坏蛋Dan:rust基础学习--基于Bevy实现扫雷小游戏day7

今天我们来结合webAssembly将我们的小游戏打包成.wasm的形式,让它可以运行在浏览器中。


构建WASM程序

关于rust程序如何打包编译成.wasm程序的这一块知识,我之前是有写过相关入门文章的,感兴趣的可以看一下

坏蛋Dan:rust基础学习--搭配webAssembly

由于我们的项目是一个workspace,所以里面的crate是需要单独打包的。

我们先来打包board_plugin

回到board_plugin/Cargo.toml文件中

我们只需要bevy的其中一个feature,所以这里我们修改下bevy的依赖。

然后加了一个只会在wasm编译目标下才会加载的依赖rand

然后回到mine_sweeper中的Cargo.toml文件中

这里额外加了个x11feature只针对native场景避免编译成wasm有问题。

最后我们回到根目录,在里面创建一个.cargo的文件夹,然后在里面创建config.toml文件。

然后执行cargo install wasm-server-runner

然后我们执行cargo serve,会跑一个服务器。

但是这里我跑起来之后发现assets加载不正常,然后搜了下,发现官网就有说

另外官网提供了从零开始的wasm构建:bevy/examples at latest · bevyengine/bevy (github.com)

我们把文件复制过去

然后重新跑一下,然后发现还是没卵用,然后发现路径不对,得是examples/wasm/assets,然后我到wasm-server-runnergithub上看了下issue,发现其实它是会自动建立连接的:Add custom static resources · Issue #9 · jakobhellermann/wasm-server-runner (github.com)

那就更怪了,看了下请求,发现是直接在根路径的。。

但是它服务器在哪咱都不知道。。。。

然后我发现有个老哥提了一个commitmerged了:Custom serve directory by daxpedda · Pull Request #19 · jakobhellermann/wasm-server-runner (github.com)

我们可以加一个环境变量WASM_SERVER_RUNNER_DIRECTORY用来定位

我们来设置一下,我这是windowpowserShell

重新运行下cargo serve

终于可以了。

感觉好累,还不如按照之前学的方式,再自己搞个node服务器。。。


总结

那么我们这个扫雷小游戏旅程就结束啦~

学了一些东西,但是依旧不是系统性的,想自己独立搞一个还是有些难度。

参考

  1. ^Bevy Minesweeper: WASM build https://dev.to/qongzi/bevy-minesweeper-part-11-3aim

发布于 2023-02-16 21:53・IP 属地广东