raylib 上手指南:15 行 C 代码,从窗口到 3D 场景跑通完整游戏循环
【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib
raylib 是一个纯 C 写的轻量级游戏开发库,把窗口、渲染、输入、音频封装进单一头文件 raylib.h,一条 gcc 命令就能编译出能跑的游戏。它没有编辑器、没有场景系统,但胜在够薄:十几行代码就是一个完整游戏的骨架,最适合想快速验证小游戏创意的开发者。
先跑起来:安装 raylib 并编译最小示例
Linux 上走包管理器即可(Windows 用 choco,macOS 用 brew,都是一条命令的事):
sudo apt install libraylib-dev想跑最新版,克隆仓库git clone https://gitcode.com/GitHub_Trending/ra/raylib,然后进 src/ 目录执行 make 构建、make install 安装。
装好写这个最短程序,开了一个 800×450 的窗口,画一行字:
#include "raylib.h" int main(void) { InitWindow(800, 450, "我的第一个 raylib 窗口"); while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(RAYWHITE); DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY); EndDrawing(); } CloseWindow(); return 0; }gcc main.c -o game -lraylib注意 while 循环里WindowShouldClose()+BeginDrawing/EndDrawing这个结构。这是 raylib 的整个程序模型:初始化、循环里读输入、更新、绘制、关闭。之后所有游戏都是在这副骨架里填内容。
用 Draw 系列函数画 2D 游戏
矩形、圆形、文字、贴图都有现成的 Draw 函数:画填充矩形是DrawRectangleRec,画圆是DrawCircle,画文字是DrawText,全程不碰任何图形 API。打砖块、贪吃蛇这类小 2D 游戏,基本就是反复画这些基础图形,再自己维护位置、做碰撞判断。
一个相机进 3D:BeginMode3D 与模型加载
进 3D 只需一句BeginMode3D(camera)。相机是个结构体:位置、目标点、朝上方向、视野角度,填四个数就定了视角。循环里 Begin/EndMode3D 之间画模型、贴纹理即可。加载外部模型就是LoadModel("scene.obj")一行,OBJ、glTF、IQM 都能读。配合 2D 相机BeginMode2D,横版游戏让相机跟着玩家走,世界就能平移、缩放。
读取键盘鼠标事件
IsKeyDown(KEY_A)判断某键是否正被按住,IsKeyPressed(KEY_SPACE)判断是否刚按下一次,GetMousePosition()拿鼠标坐标,滚轮、点击、手柄都有对应函数。判断"按住"和"刚按下"的区别很关键:前者管持续移动,后者管一次性触发。
一个完整小场景:可暂停的弹跳球
把前面的能力拼起来:小球带重力弹跳,空格暂停。变量初始化放在 main 开头,主循环只做三件事——读输入、积分位置、绘制:
if (IsKeyPressed(KEY_SPACE)) pause = !pause; if (!pause) { position.x += speed.x; position.y += speed.y; speed.y += gravity; if (position.x <= radius || position.x >= GetScreenWidth() - radius) speed.x *= -1.0f; if (position.y <= radius || position.y >= GetScreenHeight() - radius) speed.y *= -0.95f; }BeginDrawing里ClearBackground(RAYWHITE)再DrawCircleV(position, radius, MAROON)就完事。竖直方向那个-0.95f是反弹损耗,改这一个数字手感立刻不同。这就是 raylib 的开发节奏:任何小改动,编译跑一次,三秒内看到结果。
新手常踩的 raylib 坑
窗口打不开或者闪退。多数是显卡 OpenGL 版本太旧。raylib 默认走 OpenGL 3.3,先glxinfo | grep "OpenGL version"查一下,版本不够就在编译 raylib 时加-DGRAPHICS=GRAPHICS_API_OPENGL_21降到兼容版本再重新构建。
编译报 raylib.h: No such file or directory。路径问题。包管理器装的,确认带 -dev 后缀的开发包装上了;源码构建的,用-I和-L手动指向头文件和库所在目录。
程序能跑但没有声音。代码没错,是系统缺音频开发库。Linux 装一下libasound2-dev重新编译就能出声。
下一步:200 多个示例和项目模板
- examples/ 目录里有 220 多个示例,examples/README.md 里每个都标了难度星级和所属模块。挑 ⭐☆☆☆ 的一星示例(比如 core_basic_window)编译跑一遍再读代码,是最快的熟悉方式。
- projects/ 里有现成的 CMake、VS2022、CodeBlocks、VSCode 工程模板,复制一份改成自己的游戏工程,构建系统就不用自己研究了。
- src/raylib.h 本身就是一份 API 清单,所有函数带注释,按 core/shapes/models/textures/audio 分段组织,遇到不认识的函数直接搜它。
- 练习路线:先只用基础图形做贪吃蛇或打砖块,再试
LoadModel和音频加载,一轮下来常用 API 基本过了一遍。
raylib 不是一个引擎:没有场景系统、没有动画编辑器、没有物理引擎,每个角色移动都得自己写积分公式。它的边界是"薄"——你换来的是彻底看清游戏是怎么一帧帧跑起来的,之后换用更重的引擎也不会心里没底。如果你要做的东西需要复杂场景和美术管线,它不适合;如果你只想花一个下午验证一个玩法、或者学懂游戏循环本身,把它跑通,你就知道它合不合适你了。
【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考