news 2026/9/2 9:29:21

如何5分钟用C语言做出能跑的2D/3D游戏?raylib 上手实操清单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何5分钟用C语言做出能跑的2D/3D游戏?raylib 上手实操清单

如何5分钟用C语言做出能跑的2D/3D游戏?raylib 上手实操清单

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

想用 C 写个游戏却不想被引擎配置拖死?raylib 是一个轻量级的 C 游戏开发库,纯 C99、零外部依赖,从 2D 精灵、3D 场景到音频播放,一个库全包了。这篇文章按"你想做什么"来拆,不堆功能清单。

为什么是 raylib:比重型引擎省了什么

拿它和 Unity、Godot 这类引擎对比,差异很具体:

  • 没有编辑器依赖:所有游戏逻辑就是普通 C 代码,用你顺手的编译器/IDE 直接写,不用学编辑器工作流
  • 零外部依赖:图像、字体、音频这些第三方库全部打包在 src/external/ 里,clone 下来就能编译
  • 小项目最合适:官方自己的定位是"中小型 2D 游戏"和教学原型,一个库 + 几百行代码就能出一个完整可玩的 demo
  • 源码即教材:API 命名直白(LoadTexturePlaySound),配合 raylib.h 头文件注释读源码就能学会大半用法

它不是"全家桶引擎"——没有场景管理器、没有实体组件系统,这些要自己写。但对学习游戏编程和做小而美的项目,这反而是优点:你能看清每一帧是怎么画出来的。

5分钟跑通第一个 raylib 窗口

🚀 最短路径就三步:

  1. 获取源码:git clone https://gitcode.com/GitHub_Trending/ra/raylib
  2. 编译库本体(Linux/macOS,Windows 可用 VS2022 工程或 CMake):cd src && make,产物在src/lib/libraylib.a
  3. 编译仓库自带的窗口示例并运行:
// 保存为 basic_window.c,核心逻辑就这么点 #include "raylib.h" int main(void) { InitWindow(800, 450, "raylib - basic window"); while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(RAYWHITE); DrawText("Congrats! First window!", 190, 200, 20, LIGHTGRAY); EndDrawing(); } CloseWindow(); return 0; }
gcc basic_window.c -Isrc src/lib/libraylib.a -lm -lpthread -ldl -o basic_window && ./basic_window

一个白底窗口弹出、中间一行字,游戏主循环的骨架(初始化 → 循环更新/绘制 → 关闭)就已经跑起来了。想直接读参考代码的话看 examples/core/core_basic_window.c。

场景一:用 C 画一个 2D 游戏画面

想要的效果:不贴图、不用精灵,纯几何图形画出画面——跳台游戏的平台、球体的轨迹、弹幕的子弹。

怎么做:raylib 的 shapes 模块把常用图元都做成了单函数调用——DrawRectangleDrawCircleDrawLineDrawText,参数就是坐标、尺寸和颜色,连顶点数组都不用碰。位置随时间变化就每帧算一次坐标再重画,配合GetFrameTime()做帧率无关的运动。

完整例子看 examples/shapes/shapes_basic_shapes.c,同目录下还有缓动动画、碰撞检测、弹球物理等几十个变体:

场景二:精灵表做角色动画

想要的效果:角色在屏幕上跑起来、挥手、攻击——经典的 sprite animation。

怎么做:思路是"一张长图切成 N 格,每帧换一格的坐标"。先LoadTexture载入整张精灵表,再用一个Rectangle记录当前帧的裁剪区域,每帧累计GetFrameTime(),到时间就把frameRec.x推进一格,然后DrawTextureRec只画出裁剪出的那一格。整个动画系统核心就这一个矩形在移动,代码量比想象中少得多。

完整例子(含资源文件)在 examples/textures/textures_sprite_animation.c:

场景三:搭一个 3D 第一人称视角

想要的效果:FPS 式的镜头——鼠标转视角、WASD 移动,场景里放个立方体和地面网格。

怎么做:先声明一个Camera结构体(位置、朝向、 fov),调用SetCameraMode(camera, CAMERA_FIRST_PERSON)告诉 raylib 用第一人称控制方案,之后每帧UpdateCamera(&camera)自动吃掉鼠标和键盘输入。绘制时BeginMode3D(camera)切进 3D 状态,DrawCubeDrawGrid随便摆,EndMode3D()切回 2D。换CAMERA_ORBITCAMERA_FREE就是别的镜头方案,一套 API 全通用。

完整例子看 examples/core/core_3d_camera_first_person.c,examples/core/ 目录下还有轨道相机、分屏、3D 拾取等一整套镜头玩法:

场景四:给游戏加背景音乐和音效

想要的效果:背景音乐循环播放,按键时触发短音效。

怎么做:音频分两类 API。短音效用LoadSound+PlaySound,简单直接;背景音乐用流式播放的LoadMusicStream(BGM 太大不能整个塞内存),注意它需要每帧调用一次UpdateMusicStream(music)才会持续出声,这是新手最常漏掉的一步。格式支持 WAV、MP3、OGG、FLAC 等,格式库也在 src/external/ 里。

完整例子在 examples/audio/audio_music_stream.c:

raylib 编译和资源加载的常见坑

⚠️ 这些是社区里反复出现的真实问题,提前知道能省不少时间:

  • Linux 编译报 X11 头文件缺失:GLFW 后端需要桌面开发库,先装再makesudo apt install libx11-dev libxrandr-dev libxi-dev libxcursor-dev libgl1-mesa-dev(Wayland 会话另需 wayland 相关开发包)
  • LoadTexture 报加载失败:示例的资源放在各模块的resources/子目录里,路径是相对当前工作目录的,在仓库根目录直接跑./basic_window找不到资源。要么cd examples/textures/再运行,要么把资源拷到自己项目目录
  • RenderTexture 里的画面是上下颠倒的:这是 OpenGL 的坐标惯例,官方 README 明确写了需要自己在回写屏幕时翻转,属于已知限制而非 bug
  • 想要多窗口:raylib 设计上默认单窗口单 OpenGL 上下文,别折腾,需要多窗口就开多进程
  • 中文字体渲染偏糙:内置光栅化质量低于 Freetype,也不支持 RTL 和 emoji;对字体要求高建议换成 TTF 动态字体加载(LoadFont),或看 examples/text/ 的字体方案
  • CMake 用户:不想手写链接命令的话,projects/CMake/ 有现成的 CMakeLists 模板可以抄

继续深入

代码风格、目录约定看 CONVENTIONS.md,常见问题(许可证、平台、格式支持)看 FAQ.md,剩下 100 多个覆盖各模块的例子都在 examples/ 目录里,按模块分类、逐个对着改就行。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 9:25:03

如何高效利用课程资料包:从课件、作业到考题的体系化学习指南

简介:本资源是悉尼新南威尔士大学COMP9311课程2020年第二学期的完整教学资料汇编,面向数据库系统方向的本科生与研究生,聚焦关系模型、函数依赖、范式理论、SQL实现、事务管理、索引结构及ER/关系数据库设计等核心内容,有效支撑课…

作者头像 李华
网站建设 2026/9/2 9:24:45

AI芯片远程访问实战:SSH连接、任务管理与避坑指南

AI模型训练和推理越来越依赖底层芯片算力。很多团队会遇到一个很现实的问题:本地算力不够,但远端机器上有GPU或NPU芯片,怎么安全高效地把AI任务放过去跑,就成了一个绕不开的工程问题。远程访问AI芯片这件事,看起来就是…

作者头像 李华
网站建设 2026/9/2 9:24:40

新能源汽车电机控制:MBD开发流程与Simulink实战

简介:本资源是一套面向新能源汽车电控工程师与高校车辆工程专业学习者的MBD(基于模型设计)实践资料,聚焦纯电动汽车主驱电机MCU控制策略开发全流程。资源包共包含需求文档、Simulink控制模型、算法原理说明及CAN通信接口定义等核心…

作者头像 李华
网站建设 2026/9/2 9:22:03

YOLO乱停检测:从目标检测到城市治理的闭环实现

简介:本资源是一套面向人工智能方向毕业设计与课程实践的机动车乱停乱放智能检测系统,基于YOLO系列目标检测模型实现端到端违规停车识别,适用于交通管理、智慧城市类课题开发与算法落地验证。压缩包共16个文件,含13张标注示例图与…

作者头像 李华
网站建设 2026/9/2 9:21:14

基于STM32与ESP8266的智能插座设计:从硬件选型到嵌入式开发全解析

简介:本资源是一套基于STM32F103C8T6主控的远程WiFi智能插座完整开发资料,面向嵌入式初学者、物联网课程设计者及智能家居DIY开发者,解决从硬件设计到固件开发的全链路实践难题。压缩包含924个文件,总大小49.04MB,涵盖…

作者头像 李华