大体浏览过emscripten的那一堆demo后, 心想试试移植个游戏试试, 顺便体验下这项技术的实用程度
首先尝试了Onescripter, 因为手头上有可以编译运行的FateStayNight.
- 在工程配置中增加新的Platform: Emscripten, 并选择编译成可以执行的html
- 编译提示缺少bzlib.h, 增加libbz2工程(开源), 注意这个就需要编译.bc库了(相当于.lib)
- 再编译, 依赖库没问题了. 提示SDL_CD相关函数都找不到. 这也可以理解, web不方便访问光驱嘛. 使用#if EMSCRIPTEN宏隔离不支持的SDL特性代码
- 编译通过, 可以运行了, 不过提示找不到脚本文件. 原来emscripten对于文件IO是有很大的限制的, 参考: Filesystem Guide
-
- 第一种比较简单粗暴, 把所有依赖的文件打包成一个.data文件, 载入页面时下载, 下载完再运行游戏. 不过这时候所有的数据都是在内存中的, 所以fopen什么函数其实访问的都是内存中的虚拟文件系统. 实验证明, 对于FateStayNight这种上GB资源的游戏来说, 这个方法会导致浏览器崩溃-_-
- 第二种方式应该是floh在PPT中说的那种方式, 类
- 第一种比较简单粗暴, 把所有依赖的文件打包成一个.data文件, 载入页面时下载, 下载完再运行游戏. 不过这时候所有的数据都是在内存中的, 所以fopen什么函数其实访问的都是内存中的虚拟文件系统. 实验证明, 对于FateStayNight这种上GB资源的游戏来说, 这个方法会导致浏览器崩溃-_-