Loading...

文章背景图

raylib:简单易用的 C 游戏编程库安装与使用指南

2026-10-28
0
- 字
- 分钟
|

官方信息表

项目 说明
项目名称 raylib
一句话定位 简单易用的游戏编程库,让你享受写游戏的过程
代码仓库 raysan5/raylib
实现语言 纯 C(C99),采用 PascalCase/camelCase 命名
官方网站 raylib.com
在线示例 raylib.com/examples
速查手册 raylib cheatsheet
支持平台 Windows、Linux、macOS、Raspberry Pi、Android、HTML5 等
开源协议 未经修改的 zlib/libpng 协议(BSD 类,允许静态链接进闭源软件)

配图

raylib 官方 Logo

项目背景

raylib 是一个“简单易用、用来享受游戏编程”的库,README 开篇就写道:“raylib is a simple and easy-to-use library to enjoy videogames programming.” 它在设计上深受 Borland BGI 图形库和微软 XNA 框架的影响,特别适合做原型验证、游戏工具、图形化应用、嵌入式系统以及教学。

README 对“冒险者”有一句很直白的提醒:raylib 是一个编程库,没有花哨的界面、没有可视化辅助、没有调试按钮,就是用最纯粹的“斯巴达式程序员”方式写代码。这恰恰是它的定位——它不试图把游戏开发变成拖拽式的可视化工程,而是把底层繁琐的窗口、输入、OpenGL 细节封装成一套直观的 C API,让你把精力放在“游戏本身”而不是“图形管线怎么搭”上。

和许多“大而全”的游戏引擎不同,raylib 不自带编辑器、不搞 ECS 框架、不做资产管线,它就是一个库:你写一个 main(),调几个 InitWindow、BeginDrawing、DrawText 之类的函数,就得到了一个能跑的图形程序。这种极简形态让它非常适合教学、原型和小型独立游戏,也因此积累了超过 220 个官方代码示例和 70 多种其他语言的绑定。

README 还特意强调 raylib 是一个“学习导向”的库:它在功能上刻意保持精简,不追求成为完整的游戏引擎,而是把“从 2D 图形到 3D 模型、从音效到输入、从字体到着色器”这一整条学习路径上的最小可用能力都包了进来。你在它的 examples 目录里能看到窗口、图形、形状、文本、音频、模型、着色器、物理、游戏脚本等几十类示例,从最基础的“画一个圆”到“加载 3D 模型并贴图”都有对照。这种“示例即文档”的方式,让它在教育场景和独立开发者圈子里非常受欢迎。

从使用角度看,raylib 的 API 设计得很直白:画图形就是 DrawCircle、DrawRectangle、DrawLine;加载贴图就是 LoadTexture,画贴图就是 DrawTexture;读输入就是 IsKeyDown(KEY_SPACE);播声音就是 LoadSound 加 PlaySound。它把“资源加载、绘制、输入、音频、定时”这些游戏循环里必备的环节都做成了一行调用,你不需要学一套复杂的框架概念。对想入门游戏开发、又被 Unreal/Unity 那种重量级流程劝退的人,raylib 是很友好的第一站。

安装上,README 提供各平台的预编译包和包管理器,也支持用 CMake 从源码编译;它的 examples 目录本身就是最好的文档——每个示例都是一个独立的 main.c,照着改就能做出自己的小游戏。

总体上,raylib 是一个把“做图形/游戏”的门槛降到最低的 C 库:不绑框架、不搞编辑器、API 直白,配上两百多个示例,非常适合教学和原型。如果你想体验用 C 写游戏,又不想被重型引擎的工程复杂度劝退,raylib 是非常友好的起点。

README 反复强调 raylib 的目标是“enjoy videogames programming”——享受写游戏这件事本身。它刻意把窗口创建、输入轮询、OpenGL 上下文、纹理上传这些枯燥的底层工作封装掉,让你把精力放在游戏逻辑上。也正因如此,它常被用在创意编程、游戏 jam、嵌入式图形和课堂教学里:一个初学者不需要先搞懂渲染管线,照着示例抄几段代码,几分钟就能在屏幕上看到自己画的图形和文字动起来。

核心特性逐条翻译

README 的 features 一节列了一长串特性,下面挑重点翻译并展开。

零外部依赖,依赖全部内置。 README 强调 raylib 没有外部依赖,所有需要的库都打包在 src/external 目录里。这意味着你 clone 下来就能编译,不需要先装一堆第三方库,跨平台移植时也少了很多环境问题。

多平台支持。 官方支持 Windows、Linux、macOS、Raspberry Pi、Android、HTML5 等平台,一套代码可以在很多地方跑,HTML5 更是让 raylib 程序直接变成网页。

硬件加速,覆盖多代 OpenGL。 raylib 用 OpenGL 做硬件加速,支持 1.1、2.1、3.3、4.3 以及 OpenGL ES 2.0、ES 3.0。它还提供了一个独特的、可以单独拿出来用的 OpenGL 抽象层 rlgl。

软件渲染后端。 除了 OpenGL 硬件路径,raylib 还提供软件渲染后端 rlsw,README 特别标注“不需要 OpenGL 也能跑”,这在没有 GPU 的嵌入式或特殊环境里很有用。

这意味着同一份 raylib 代码,既可以在桌面和浏览器里走硬件加速 OpenGL 路径,也可以在没有 GPU 的环境里退到软件渲染后端。这种灵活性让它不仅能做游戏,也能在嵌入式设备、教学机器、甚至特殊终端上提供一致的图形 API,而不用为不同平台重写绘制逻辑。

丰富的纹理与字体格式。 支持多种纹理格式,包括压缩格式 DXT、ETC、ASTC;字体支持 TTF、OTF、FNT、BDF 以及 sprite font。

完整的 3D 能力。 README 写明支持完整的 3D,包括 3D 形状、模型、广告牌、高度图;材质系统灵活,支持经典贴图和 PBR 贴图;支持带骨骼动画的 3D 模型(骨骼蒙皮、GPU 蒙皮),模型格式覆盖 IQM、M3D、glTF。

Shader 与音频。 支持 shader,包括模型 shader 和后处理 shader;音频方面支持加载和播放,并带流式播放,格式覆盖 WAV、QOA、OGG、MP3、FLAC、XM、MOD。此外还有强大的数学模块 raymath,专门做向量、矩阵、四元数运算,以及 VR 立体渲染。

庞大的示例与绑定生态。 README 给出超过 220 个代码示例、超过 70 种编程语言绑定,并强调 raylib 是免费开源的。

需要特别说明的是,README 也在 limitations 一节坦白列出了为“代码简单”而做的取舍,这些并不是 bug,而是刻意的设计决定:默认只支持单窗口单 OpenGL 上下文,不支持多窗口;在支持窗口的平台上,当你拖动或缩放窗口时渲染循环会暂停;RenderTextures 按 OpenGL 的惯例是垂直翻转的,要不要翻回正由你自己决定;字体栅格化质量不如 Freetype2、HarfBuzz 这类专业方案;文字绘制不支持从右到左排版、连字和 emoji。README 表示社区里有一些 fork 和替代方案来弥补这些限制,但改不改由你自己决定。这种“把局限写在明面上”的做法,能帮你在选型时避免对 raylib 产生不切实际的期待。

环境要求与部署

raylib 的部署分“本机编译/安装”和“面向 Web 的 HTML5 构建”两条路线,README 都有说明。

方式一:预编译包与各平台构建

README 指出 raylib 的 Windows、Linux、macOS、Android、HTML5 二进制发布在 GitHub Releases 页面,同时也可以通过多个操作系统的包管理器安装。详细的分平台构建指南在 raylib Wiki,其中分别给出了 Windows、macOS、GNU Linux、Raspberry Pi、Android 等平台的具体步骤,以及通用的 CMake 构建方式。

README 还提到,raylib 最初是在 Windows 上用 Notepad++ 和 MinGW GCC 开发的,但可以在各平台的其他 IDE 中使用;仓库的 projects 目录 提供了大量开箱即用的工程模板,方便你用不同 IDE 直接编译 raylib 和示例。README 同时坦诚地提醒,这些模板可能需要你根据自己的环境做一些调整,发现问题欢迎提 PR 或开 issue。

方式二:构建为 Web(HTML5 / WebAssembly)

README 在平台列表里直接包含 HTML5,并在 Wiki 里提供了 Working for Web (HTML5) 的专门指南。用 Emscripten 工具链把 raylib 程序编译成 WebAssembly 后,就可以在浏览器里直接运行。官方甚至把示例直接挂到了网页上——README 里那段基础示例就标注了“点此在网页上实时运行”,你不需要安装任何东西,打开浏览器就能看到 raylib 程序跑起来。

使用方法

README 给出的最小示例非常能体现 raylib 的风格:创建一个窗口,然后在主循环里清屏、画一段文字。

#include "raylib.h"

int main(void)
{
    InitWindow(800, 450, "raylib example - basic window");

    while (!WindowShouldClose())
    {
        BeginDrawing();
            ClearBackground(RAYWHITE);
            DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
        EndDrawing();
    }

    CloseWindow();

    return 0;
}

逐行看:InitWindow(800, 450, ...) 打开一个 800×450 的窗口;while (!WindowShouldClose()) 是主循环,直到用户点关闭;BeginDrawing() 标记一帧绘制开始,ClearBackground(RAYWHITE) 把背景刷成白色,DrawText(...) 在指定坐标画一段文字,EndDrawing() 结束这一帧;最后 CloseWindow() 释放窗口。整个程序没有任何回调或消息循环需要你手写,框架把这些都包好了。

这套“窗口—主循环—开始绘制—画东西—结束绘制”的骨架,就是 raylib 所有程序的通用模板。你在 BeginDrawing() 和 EndDrawing() 之间,把 DrawText 换成 DrawRectangle、DrawCircle、DrawTexture、DrawModel、DrawTexturePro 之类的调用,就能画出你想要的画面;输入部分用 IsKeyDown()、IsMouseButtonPressed() 之类的函数查询,每帧轮询一次,不需要注册任何事件回调。这种“每帧轮询”的即时模式,正是游戏编程里最经典、也最容易上手的写法。

对于完全没做过图形编程的人,raylib 把入门门槛压得很低:不需要先学渲染管线、矩阵变换、Shader,照着示例改几行就能在屏幕上看到自己画的方块动起来;等你熟悉了 2D,再顺着示例过渡到 3D 模型、光照、后处理,整个学习曲线很平滑。这也是它被大量课堂和游戏 jam 选用的原因。

README 建议把官方示例作为主要学习资料:仓库里有 +220 个代码示例,没有标准 API 文档,但有一份 cheatsheet 列出了所有函数和简短说明,参数名和返回值命名都足够直观。

这种“示例即文档”的学习方式,是 raylib 区别于很多大型框架的地方:你不需要先啃几百页手册,直接打开 在线示例页,挑一个和你想做的东西最接近的例子,在网页里跑起来,再把源码拷回本地改。从画一个圆、移动一个方块,到加载 3D 模型、播放音效、写一个简单的 2D 游戏,官方示例基本覆盖了入门阶段需要的所有套路。

常见问题(FAQ)

问:raylib 是游戏引擎吗?需要用它自带的编辑器吗? 不是。README 明确它是一个编程库,没有花哨界面、没有可视化辅助、没有调试按钮,就是用纯代码写游戏。它适合喜欢写代码、想快速做原型的人,而不是想要拖拽式编辑器的人。

问:我能不能把 raylib 静态链接进商业闭源软件? 可以。raylib 采用未经修改的 zlib/libpng 协议,这是一个 OSI 认证的 BSD 类许可证,明确允许静态链接进闭源软件。

问:raylib 有哪些设计上的限制? README 自己列出了几条为了代码简洁而做的取舍:默认单窗口单 OpenGL 上下文,不支持多窗口;在支持窗口的平台上,窗口缩放和移动会暂停渲染循环;RenderTextures 默认按 OpenGL 方式垂直翻转,需要你自己翻转后再画到屏幕上;字体栅格化质量不如 Freetype2、HarfBuzz;文字绘制不支持从右到左、连字和 emoji。

问:没有 OpenGL 的环境能用 raylib 吗? 可以。除了 OpenGL 硬件路径,raylib 还提供软件渲染后端 rlsw,README 明确标注它不需要 OpenGL,适合没有 GPU 的场景。

问:怎么学 raylib 最快? README 建议直接以官方示例为学习入口,配合 cheatsheet 查函数;想了解设计思路可以看 raylib Wiki,还有 raylib-games 游戏合集 参考别人怎么用。

问:raylib 支持哪些编程语言绑定? README 给出超过 70 种编程语言绑定,完整清单见仓库里的 BINDINGS.md,你不必非得用 C 才能用上 raylib。

跳转链接

评论交流

文章目录