☰
用 raylib 十分钟搭出第一个跨平台 2D/3D 游戏:从 0 到 1 全记录
2026/10/3 11:37:27 网站建设 项目流程

用 raylib 十分钟搭出第一个跨平台 2D/3D 游戏:从 0 到 1 全记录

【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib

raylib 是一个 C 语言游戏开发库:单个raylib.h头文件入口,图形、音频、窗口处理全部内置,无外部依赖要配。适合想第一次用 C 写出能跑的 2D/3D 游戏的你。

你想做个小游戏,结果配环境配了半小时?用 raylib,这步能压缩成一条安装命令,加上十几行 C 代码就能弹出第一个窗口。

📦 它凭什么值得一试

卖点一句话解释源码位置
零外部依赖OpenGL、窗口(GLFW)、音频、图像库全部内置,装好即用,换台机器照样能编译src/external/
单头文件入口只需#include "raylib.h",全部 API 一个头文件里查得到src/raylib.h
10 种平台后端Desktop、WebAssembly、Android、Raspberry Pi、DRM 嵌入式等,同一份代码换个构建参数就跨平台src/platforms/

它和同类库最大的不同:raylib 是"库"而不是"引擎"。没有编辑器、没有场景系统,所有逻辑都在 C 代码里——学习曲线短,但碰撞、物理这类东西得你自己写。

🚀 跑通第一个 Demo

安装,每个平台一条最省事的命令:

# Windows(Chocolatey) choco install raylib # macOS(Homebrew) brew install raylib # Linux(Ubuntu/Debian) sudo apt install libraylib-dev

新建first_game.c,这就是 raylib 里最短的游戏主循环:

#include "raylib.h" int main(void) { InitWindow(800, 450, "我的第一个游戏"); // 创建 800x450 窗口 SetTargetFPS(60); // 锁定 60 帧 while (!WindowShouldClose()) // 主循环:检测 ESC 或关闭按钮 { BeginDrawing(); // 开始一帧的绘制 ClearBackground(RAYWHITE); // 清屏 DrawText("Hello, raylib!", 300, 200, 20, LIGHTGRAY); // 画文字 EndDrawing(); // 提交本帧 } CloseWindow(); // 关闭窗口、释放资源 return 0; }

编译并运行:

gcc first_game.c -o first_game -lraylib ./first_game

弹出窗口、看到一行字,骨架就跑通了:InitWindow建窗口 → 主循环里更新加绘制 →CloseWindow退出。跑通之后别急着写自己的游戏,打开examples/里任意一个.c文件读一遍,比翻文档快得多。

⚖️ 它擅长什么,不擅长什么

能力定性常用 API
2D 绘图开箱即用,形状、文字、精灵动画齐全DrawTexture/CheckCollisionRecs
3D 渲染基础管线完整,模型、材质、着色器都有BeginMode3D/LoadModel
音频WAV、MP3、OGG、FLAC 及流式播放LoadSound/PlaySound
输入键盘、鼠标、手柄、手势全覆盖IsKeyPressed/GetMousePosition

它不做的事:没有物理引擎、没有网络、没有场景管理。碰撞只是CheckCollisionRecs这类几何判断函数,重力、回弹、寻路都得你自己实现。把它定位成一个"很听话的渲染和输入库",预期就不会落空。

🎮 场景 A:2D 小游戏核心循环

2D 游戏主循环拆开看就三件事:移动、碰撞、绘制。用矩形碰撞 API,"接住下落方块"这类小游戏的核心代码不到 10 行:

Rectangle player = { 100, 300, 32, 32 }; Rectangle ball = { 400, 300, 16, 16 }; // 更新:按 A/D 移动,用帧时间保证速度不随帧率漂移 if (IsKeyDown(KEY_A)) player.x -= 200 * GetFrameTime(); if (IsKeyDown(KEY_D)) player.x += 200 * GetFrameTime(); // 碰撞:矩形相交判断 if (CheckCollisionRecs(player, ball)) ResetBall(&ball); // 绘制 DrawRectangleRec(player, RED); DrawRectangleRec(ball, BLUE);

ResetBall是你自己写的函数:把球放回顶部并换个随机位置。"用GetFrameTime()算移动量、用CheckCollisionRecs判碰撞"这套组合,能覆盖绝大多数 2D 玩法;把两个Rectangle换成LoadTexture加载的贴图,就是精灵版。

🕹️ 场景 B:3D 场景,一个相机的事

3D 场景只需要两样:一个Camera3D参数,外加用BeginMode3D包住绘制。相机的位置、目标点、向上方向、视野角度,四个参数就定了视角:

Camera3D cam = { 0 }; cam.position = (Vector3){ 5.0f, 5.0f, 5.0f }; cam.target = (Vector3){ 0.0f, 0.0f, 0.0f }; cam.up = (Vector3){ 0.0f, 1.0f, 0.0f }; cam.fovy = 45.0f; // 在绘制循环里 BeginMode3D(cam); // 切到 3D 模式 DrawCube((Vector3){ 0, 0, 0 }, 1, 1, 1, RED); // 画立方体 DrawGrid(10, 1.0f); // 画网格 EndMode3D(); // 回到 2D 模式

想改成第一人称视角?一行切换,WASD 移动和鼠标转视角由 raylib 接管:

SetCameraMode(&cam, CAMERA_FIRST_PERSON); // 一行切到第一人称

🔧 用 CMake 把工程搭起来

文件超过一个,就换 CMake。官方模板在 projects/CMake/,四行就能用:

cp -r projects/CMake mygame # 把模板复制成自己的项目 cd mygame && mkdir build && cd build cmake .. # 已装 raylib 就直接链接,否则自动拉取编译 make && ./example # 构建并运行

版本给个明确结论:仓库当前是 6.0(2026 年 4 月发布),6.2 在开发中——新项目直接用最新稳定版,别追 6.2 的开发版 API。包管理器里的版本太旧时,可以从源码自己编译:

git clone https://gitcode.com/GitHub_Trending/ra/raylib raylib

🕳️ 我踩过的 3 个坑

坑 1:编译找不到 raylib.h

  • 现象:gcc报 "raylib.h: No such file or directory",或链接时报找不到-lraylib。
  • 原因:包管理器把头文件和库装进了系统路径,但你当前编译器工具链不在搜索路径里。
  • 修复:gcc game.c -o game $(pkg-config --cflags --libs raylib)

坑 2:窗口一闪而过,程序秒退

  • 现象:运行可执行文件,窗口闪一下就没有了,或直接崩溃。
  • 原因:raylib 默认按 OpenGL 3.3 以上初始化,老旧集显或显示服务器版本不够,上下文创建失败。
  • 修复:cmake -B build -DOPENGL_VERSION=2.1降到 2.1 重新编译。

坑 3:跑官方示例,提示找不到模型文件

  • 现象:自己写的程序没问题,一跑examples/里的示例就报文件加载失败。
  • 原因:示例用相对路径加载资源,基准是"当前工作目录",不是源码所在目录。
  • 修复:进到示例目录再运行,比如cd examples/core && ./core_basic_window。

📅 你的 7 天路线

每天一个可验证的小目标,跑没跑通自己说了算:

  1. Day 1:跑通examples/core/下 5 个示例,从core_basic_window开始

  2. Day 2:改shapes_bouncing_ball,调重力加速度和反弹系数,看轨迹变化

  3. Day 3:用CheckCollisionRecs写出自己的"接住下落方块"

  4. Day 4:用BeginMode3D加载一个模型(参考models_loading示例)

  5. Day 5:给 3D 场景加上SetCameraMode轨道相机和第一人称切换

  6. Day 6:加一段背景音乐加一个音效(LoadSound/PlaySound)

  7. Day 7:用 Emscripten 把游戏移植到 Web,或发给朋友在他机器上跑一遍

卡住的时候,最直接的入口是 raylib 项目的 GitHub Issues,先搜再问;想实时交流也有官方 Discord。

  • 装好 raylib 并跑通core_basic_window
  • 写出带移动和碰撞的 2D 小游戏
  • 让一个 3D 场景带模型和相机跑起来
  • 加进一段声音
  • 移植到 Web,或交给朋友试玩

上面这些第一天就能做完大半,真正的起点是你改出来的第三个示例。

【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询