主要观点:尝试用 SQL 构建 3D 游戏引擎,以 DuckDB-WASM 为例,经历诸多挑战后实现了类似 Doom 的游戏,虽性能尚可但不适合生产,是很好的学习体验,分享了代码并探讨未来可能性。
关键信息:
- 以数据库为世界,用 SQL 操作游戏状态,如移动、射击等。
- 定义 SQL VIEW 进行射线投射和渲染 3D 场景,结合 JavaScript 处理输入和精灵绘制。
- 遭遇多种问题,如 DuckDB-WASM 加载失败、SQL 方言差异、查询规划器问题、异步 race condition 等,并给出解决办法。
- 游戏性能约 6 - 7 FPS,SQL 射线投射视图耗时 80 - 100ms,JavaScript 精灵渲染较快。
- 学到 SQL 可用于非传统用途、DuckDB-WASM 性能不错、语言边界可模糊、调试跨语言边界有挑战、查询规划复杂等。
重要细节: - 初始化 DuckDB-WASM 需遵循推荐模式,避免标准 CDN 链接失败。
- DuckDB 更接近标准 SQL 序列,使用
CREATE SEQUENCE
代替AUTOINCREMENT
。 - 调整 SQL VIEW 逻辑以满足查询规划器要求,避免表函数相关错误。
- 通过布尔锁解决异步
setInterval
引发的 race condition 问题。 - 结合 SQL 和 JavaScript 处理精灵绘制,创建新 SQL VIEW 输出屏幕列到最近墙的距离。
- 分享了 GitHub 上的完整源代码,鼓励他人继续探索。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。