Gamedev in Zig is actually pretty good (2025)

Lobsters Hottest 新闻

摘要

Zig 语言在游戏开发中表现出色,凭借与 C 的无缝互操作和精细内存控制,适合底层控制偏好的开发者。尽管语言尚年轻,存在 LSP 弱、文档不全等问题,但 2025 年已值得尝试。

<p><a href="https://lobste.rs/s/y23kkm/gamedev_zig_is_actually_pretty_good_2025">Comments</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/11 21:28

### TL;DR Zig 凭借与 C 的无缝互操作、精细的内存控制和简洁的构建系统,在游戏开发中表现出色,尤其适合偏爱底层控制而不想被 C++ 复杂特性困扰的开发者。尽管语言还很年轻(0.13 版本),存在 LSP 弱、文档不全等问题,但已值得在 2025 年认真尝试。 --- ## 为什么 Zig 适合游戏开发 Zig 是一门底层、高性能的系统级语言,给你更精细的控制:你自己分配和释放内存,还能通过特殊的分配器(甚至自己写)来指定如何分配。没有隐藏的内存分配,也没有隐藏的控制流。没有运算符重载,因为你可能不想用 `+=` 就在堆上分配内存——这更符合游戏开发中对性能可预测性的需求。 更重要的是,Zig 能无缝地与 C 代码互操作,基本上你在 Zig 里编程就能用任何你想用的 C 库。这意味着你可以直接使用成熟的 C 游戏库(如 raylib、SDL、sokol),无需编写胶水代码或忍受复杂绑定。 --- ## raylib-zig:最顺滑的入门方式 对大多数人来说,**[raylib-zig](https://github.com/Not-Net/raylib-zig)** 正是你需要的。它是一组非常薄的 raylib C 库绑定,可以轻松用在任何 Zig 项目里。虽然你也可以直接在 Zig 项目里使用 raylib,但用这个更省心,尤其是设置起来更方便。 ### 设置步骤 1. **安装 Zig** 下载 zig 安装包或使用包管理器,例如 macOS 上用 Homebrew: ```bash brew install zig ``` 2. **创建项目** ```bash mkdir youtube-raylib-example && cd $_ zig init ``` 这会生成 `build.zig`、`build.zig.zon`、`main.zig` 和 `root.zig`。 3. **添加 raylib 依赖** 前往 raylib-zig 仓库,复制添加依赖的命令并粘贴到终端,它会自动更新 `build.zig.zon`。 然后打开 `build.zig`,粘贴从 raylib-zig 复制过来的代码段——先获取依赖和模块,再链接库并添加导入路径。 4. **编写代码** 清空 `main.zig`,写入: ```zig const rl = @import("raylib"); pub fn main() void { rl.initWindow(800, 600, "Zig raylib example"); defer rl.closeWindow(); // 利用 Zig 的 defer 自动清理 while (!rl.windowShouldClose()) { rl.beginDrawing(); rl.clearBackground(rl.Color.skyBlue); rl.endDrawing(); } } ``` 5. **运行** ```bash zig build run ``` 第一次构建会编译 raylib,之后就会看到一个天蓝色窗口。 > 用 Zig 搭建项目比用 C 简单得多——C 需要手动从源码构建、配置库和环境,再丢给 CMake 或 Makefile。Zig 的构建系统抽象了这些,但你仍然拥有绝对控制权。你可以直接查看 raylib-zig 的 `build.zig`,看到他们做的事情跟你自己写的一样,没有黑魔法。 --- ## 其他值得关注的库 ### SDL3(fork) 有一个基于 Zig 构建系统的 SDL3 fork,它其实就是 SDL3 仓库,但切换成了 `build.zig`。把它加入你的项目就像两个命令一样简单,可以立即使用最新版 SDL3(录制视频那天刚发布)。 ### sokol + sokol-zig **[sokol](https://github.com/floooh/sokol)** 是一个头文件风格的 C 库(类似 stb),用于制作跨平台游戏。它根据操作系统使用不同的图形 API(macOS 用 Metal,Linux 用 OpenGL,Windows 用 DirectX),抽象掉了平台相关代码。 不过让项目在不同平台上构建一直是个痛点,直到 **[sokol-zig](https://github.com/floooh/sokol-zig)** 出现——由 sokol 作者维护,让你能无缝使用 sokol,在所有平台上都能工作,无需记忆不同系统的编译命令。 ### zig-gamedev 一个用于 Zig 游戏开发的库集合,包含音频、glfw、数学库,甚至有自己的 sdl2/sdl3。缺点:它们追踪 Zig 的 nightly 构建,而官方发布版 0.13.0 暂时无法编译它们。如果你愿意用 nightly,这是一个宝藏。 ### Mach 引擎 类似 Bevy 的 ECS 驱动引擎,非常全面,文档不错,正在积极开源开发中。如果你从 Rust 背景过来、想用 ECS 做游戏,值得留意。 --- ## 作者的个人项目:两天搭建的小引擎 作者花了两天时间用 Zig 写了一个小型引擎,用于做物理模拟。运行 `zig build run` 后能看到一个带天空盒的螺旋线演示,GUI 设置简单(可调整摄像机 FOV、添加速度等)。用 Zig 工作的体验比直接写 C 好得多——在 C 里你可能还得自己写动态数组,而在 Zig 中一切都很顺手。 作者总结:从直接使用 C 到使用带有许多现代好处的 C(但又不像 C++ 那样什么都往里塞),这是一个非常好的升级。 --- ## Zig 的不足之处 ### LSP 体验不佳 Zig 的 LSP 非常欠缺。例如删掉结构体一个字段后,代码中还在使用该字段,LSP 不会报错,只有颜色变化,导致在 Neovim 中没有“跳转到错误”功能,直到运行构建命令才暴露问题。相比之下,Rust 的 LSP 会没完没了地抱怨每一个潜在问题。 ### 文档不完整 尤其构建系统是近期变动较多的部分之一,有些特性在文章中读到后却发现实际不存在、名字不同或位于完全不同的结构体中。需要自己深入挖掘才能解决。不过总体遇到的大问题不多。 --- ## 总结 尽管 Zig 还很年轻(0.13 版本),不稳定,东西会变,需要准备修改代码库,但它作为系统编程领域里非常酷的语言,在 2025 年已经展现出巨大的潜力。如果你愿意尝鲜,并接受一些粗糙的边角,用 Zig 写游戏会是一个非常愉快的体验。 **Source:** [Gamedev in Zig is actually pretty good (2025) - YouTube](https://www.youtube.com/watch?v=-xIFpg7sBVs)

相似文章

Zig 示例教程

Hacker News Top

通过带注释的示例,对 Zig 编程语言进行实践性介绍,涵盖从基础到高级的主题。灵感来源于 Go by Example。

重返Zig

Lobsters Hottest

作者描述了从Zig到Rust再回到Zig的历程,探讨了编程语言中稳定性与表达力之间的权衡。

Zig 示例

Lobsters Hottest

Zig by Example 是一本 Zig 编程语言的实践入门教程,包含针对版本 0.16 的带注释的示例程序。