Farbrausch 演示场景工具源码合集(fr_public)
Farbrausch 2001—2011 年 demo 工具源码合集,使用 C++,涉及 demoscene 与 D...
wechatGame-all · Aimee1608/wechatGame-all
这是一个用 JavaScript 编写的微信小游戏源码集合仓库,作者将搜集到的小游戏源码汇总在一起。仓库描述为「微信小游戏集合,搜集的小游戏源码」,未提供具体游戏清单与玩法说明。README 摘录内容实际来自 ammo.js 物理引擎文档,与仓库主...
ammo.js 是 Bullet 物理引擎面向 JavaScript 的直接移植版本。项目使用 Emscripten 将原本以 C++ 编写的 Bullet 源码编译为 JavaScript,源码翻译过程不经过人工重写,因此作者在 README 中说明其功能应与原始 Bullet 保持一致。
项目名称中的 “ammo” 是一句玩笑式缩写,意为“通过从 C++ 编译 Bullet,避免了自己动手写一个 JS 物理引擎”。ammo.js 与 Bullet 一样采用 zlib 许可证。
需要区分两种使用路径:
-s USE_BULLET=1 使用 Bullet,此时并不需要 ammo.js。自行构建 ammo.js 需要 Emscripten 与 cmake。README 给出的基本流程是:
$ cmake -B builds
$ cmake --build builds
配置阶段可指定若干关键选项,例如:
$ cmake -B builds -DCLOSURE=1 # 使用 closure 编译
$ cmake -B builds -DTOTAL_MEMORY=268435456 # 初始 256MB 堆(默认 16MB)
$ cmake -B builds -DALLOW_MEMORY_GROWTH=0 # 固定堆,而非默认可增长堆
在 Windows 上可使用 cmake 的 MinGW 生成器:
> cmake -B builds -G 'MinGW Makefiles'
> cmake --build builds
若 Emscripten 不是通过 emsdk 安装,可用 -DEMSCRIPTEN_ROOT 指定其位置。
README 专门给出 Docker 构建路径,其好处包括保持本机原生环境干净、便于移植等。安装 Docker 后执行:
$ docker-compose build # 创建 Docker 镜像
$ docker-compose up # 创建容器并构建 ammo.js
$ docker-compose run builder # 修改后再次构建 ammojs 目标
如需给 cmake 追加参数,需要编辑 docker-compose.yml。
README 提供两种缩减产物体积的思路:
ammo.idl 中移除不需要的接口,例如仅在需要可视化调试渲染时才用到的 btIDebugDraw 与 DebugDrawer。-s EXPORTED_RUNTIME_METHODS=[] 参数中移除方法,例如 UTF8ToString 仅在需要 DebugDrawer 输出可读错误信息时才需要。README 列出了若干可直接打开的 WebGL 演示,覆盖 Bullet 的典型能力:
这些示例可作为理解 ammo.js 调用方式的入口。README 还指出 examples/hello_world.js 是 Bullet 的 HelloWorld.cpp 翻译成 JavaScript 的完整示例,examples/webgl_demo/ammo.html 则是 WebGL 演示代码。
ammo.js 的 API 由 Bullet 源码自动生成,因此大体与 Bullet 一致,但 README 明确列出若干差异与注意事项:
Ammo.* 访问,例如 Ammo.btVector3。get_ / set_ 前缀的存取函数访问,例如 rayCallback.get_m_rayToWorld()。README 解释未使用原生 JavaScript getter/setter,是出于性能方面的考虑。float&、btScalar& 的函数会被转换为 float。原因是 float& 在 C++ 中相当于语法更友好的 float*,若在 JavaScript 中每次调用都写堆会非常难用;转换后可以直接写 new btVector3(5, 6, 7)。如确需 float& 方法,可提交 issue。ammo.idl 中描述的内容会被包装;需要额外内容可通过 pull request 补充。op_set、op_add、op_sub、op_mul、op_div、op_get、op_eq。自动测试通过 npm test 运行,底层使用 ava,分别针对 JavaScript 与 WebAssembly 两种构建:
$ npm run test-js # --> AMMO_PATH=builds/ammo.js ava
$ npm run test-wasm # --> AMMO_PATH=builds/ammo.wasm.js ava
也可以直接运行 ava 以获得更多选项,例如 npx ava --verbose、npx ava --node-arguments inspect。未定义 AMMO_PATH 时默认测试 builds/ammo.js。
运行示例方面,仓库把 http-server 作为开发依赖引入。需要从仓库根目录提供服务,以便示例能在 builds 目录找到 ammo:
$ npx http-server -p 3000 .
README 的 Troubleshooting 指出一个常见错误:创建对象时忘记写 new,例如 var vec = Ammo.btVector3(1,2,3); 是错误写法,可能导致 Cannot read property 'a' of undefined 或 Cannot read property 'ptr' of undefined 之类的报错。
提交 issue 时,README 建议附上可复现问题的脚本,便于调试并纳入自动测试。
发布流程要求:先用 cmake -B builds -DCLOSURE=1 启用 closure 配置,构建 asm.js 与 wasm 两个库,确保 npm test 全部通过,再运行 examples/webgl_demo 的 WebGL 演示确认显示正常(例如用 firefox examples/webgl_demo/ammo.html;Chrome 需要 Web 服务器,因为其不接受 file:// URL)。
README 说明 ammo.js 基于 Bullet 2.82,并合入了来自 2.83 的 raycast 修复补丁。
examples/hello_world.js 理解最小调用路径,再对照 examples/webgl_demo/ammo.html 看渲染与物理如何协作。Ammo.* 命名空间与 get_ / set_ 存取函数约定,可减少调试成本。ammo.idl 与导出运行时方法。
Farbrausch 2001—2011 年 demo 工具源码合集,使用 C++,涉及 demoscene 与 D...
用 C 语言重新实现 1995 年 PSX 竞速游戏 wipEout 的开源项目,作者标注仍在...
Fish Folk: Jumpy 是一款鱼类像素画风的战术 2D 射击游戏,使用 Rust 语言与...
该仓库为 Java 语言项目,名称 BuildGDX 由「Build」与「GDX」组合,推测与 B...