raylib 快速上手:30 分钟从空白屏幕到可玩的 2D/3D 小游戏
【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib
raylib是一个用 C 编写的游戏开发库:窗口、2D 绘制、3D 渲染、音频、输入全部装在一个头文件里,一条gcc命令就能编出可运行的小游戏。适合想快速验证游戏创意、又不想被引擎概念淹没的你。这里从安装到做一个可暂停的弹跳球,把路上的坑也一并标出来。
一行话认识 raylib:适合谁
raylib 不是引擎——没有编辑器,没有场景系统,也没有预制物理。它做的事情只有一件:把"开窗口、画东西、读输入、出声"这条链路封装到最薄。
- 你熟悉 C,想从零看懂一帧游戏是怎么跑起来的;
- 你要做一个 2D 小玩法(贪吃蛇、打砖块、弹幕),或者给 3D 场景配个简单相机;
- 你需要音频、贴图、模型,但希望每个功能只查一个函数就能用。
反过来,如果你要的是关卡编辑、动画系统、UI 框架,它帮不上忙。
不碰图形 API,直接画 2D
矩形、圆、文字各是一个函数
2D 世界里你只需要记三类函数:DrawRectangle()、DrawCircle()、DrawText()。颜色直接用RAYWHITE、MAROON这些内置常量。打砖块是"一堆矩形 + 碰撞判断",贪吃蛇是"一条链 + 格子坐标",都不用关心顶点、着色器这些词。
键盘和鼠标各几行
读输入是三个函数的事:IsKeyPressed()判断刚按下、IsKeyDown()判断持续按住、GetMousePosition()拿鼠标坐标。做横版游戏时,再用BeginMode2D()包一个2D 相机,世界就能跟着玩家平移和缩放。
一个相机搭出 3D 场景
三行代码进 3D
3D 的入口是BeginMode3D(),它要一个相机(Camera):站在哪、看向哪、朝上方向、视野角度,四个数字而已。进出 3D 用BeginMode3D()/EndMode3D()包住,中间画模型、贴纹理、画网格。
Camera camera = { 0 }; camera.position = (Vector3) { 0.0f, 10.0f, 10.0f }; camera.target = (Vector3) { 0.0f, 0.0f, 0.0f }; BeginMode3D(camera); // 这里画你的 3D 内容 EndMode3D();运行后你会看到一个带纹理的立方体在场景里转,鼠标可以绕着它转视角。
加载外部模型是一行LoadModel("scene.obj"),OBJ、glTF、IQM 格式都认,骨骼动画也内置支持。
三步装好 raylib 并跑通第一个窗口
包管理器一行装完
Linux 用apt装libraylib-dev,macOS 用brew,Windows 用choco,都是一条命令的事。装完直接编译你的游戏源码:
gcc main.c -o game -lraylib想追最新版就从源码构建:
git clone https://gitcode.com/GitHub_Trending/ra/raylib cd raylib/src make && sudo make install最小窗口程序长什么样
整个程序就是:开窗口、每帧清屏、画一行字、循环到关闭。
InitWindow(800, 450, "raylib 第一个窗口"); while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(RAYWHITE); DrawText("Hello raylib!", 190, 200, 20, LIGHTGRAY); EndDrawing(); } CloseWindow();运行后会弹出一个白底窗口,中间一行字,关掉窗口程序退出。这套"初始化 → 循环 → 绘制 → 关闭"的骨架,后面所有游戏都长这样。
完整走一遍:可暂停的弹跳球
主循环只做三件事
挑一个最典型的场景:小球带重力在屏幕里弹跳,空格随时暂停。变量在main开头初始化,主循环只干三件事——读输入、更新位置、绘制。核心逻辑如下:
if (IsKeyPressed(KEY_SPACE)) paused = !paused; if (!paused) { ball.position.x += ball.velocity.x; ball.position.y += ball.velocity.y; ball.velocity.y += gravity; // 重力 if (ball.position.x < radius || ball.position.x >= width - radius) ball.velocity.x *= -1.0f; // 撞墙反弹 if (ball.position.y >= height - radius) ball.velocity.y *= -0.9f; // 落地损耗 }运行后小球会带重力来回弹,按空格整个画面瞬间定住。落地那个-0.9就是反弹损耗,改这一个数字手感就变了——这就是 raylib 的开发节奏:任何小改动,跑一次就能看到。
常见报错:症状 → 原因 → 解法 ⚠️
症状:窗口打不开,或一闪就退。原因:显卡的 OpenGL 版本太旧,raylib 默认走 3.3。先跑glxinfo | grep "OpenGL version"查一下,版本不够就从源码构建时降到兼容模式:make GRAPHICS=GRAPHICS_API_OPENGL_21。
症状:编译报raylib.h: No such file or directory。原因:头文件路径没找到。包管理器装的,确认带-dev后缀的开发包装上了;源码构建的,编译时手动加-I指头文件、-L指库文件目录。
症状:程序能跑,就是没有声音。原因:代码没问题,是系统缺音频开发库。Linux 上sudo apt install libasound2-dev,重新编译就能出声。
跑通之后,接着往哪练
- 翻官方示例:examples/ 里有 200 多个例子,每个都标了难度星级。挑一星的编译运行再读代码,是最快的熟悉方式。
- 用模板起步:projects/ 里备好 CMake 和主流 IDE 的工程配置,其中 projects/CMake/ 最轻,复制一份改成自己的游戏工程就行。
- 顺路看源码:src/ 按模块分文件(rcore、rtextures、rmodels……),边写边查实现比啃文档扎实。
- 跟进版本:CHANGELOG 记录了每个版本改了什么,升级前扫一眼不踩雷。
练习路线建议:先用基础图形做一个 2D 小游戏(贪吃蛇或打砖块),再加载一个模型和一段音频,这一轮下来常用 API 基本过了一遍。
花一个下午,把最小窗口和弹跳球各跑一遍。跑通了,你就知道 raylib 适不适合你。
【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考