news 2026/9/2 12:41:42

用 C 做第一个游戏要多久?raylib 完整实战手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 C 做第一个游戏要多久?raylib 完整实战手册

用 C 做第一个游戏要多久?raylib 完整实战手册

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

想写个小游戏,却在环境配置上耗了半天?这篇文章带你看 raylib——一个零外部依赖的 C 游戏库——从装上它、跑起第一个窗口,到画出 2D 和 3D 场景,并把构建时最常踩的 5 个坑一次讲清,适合想"写代码就看见画面"的读者。

🎯 为什么选 raylib:4 个省时间的硬指标

特性说明对你的价值
零外部依赖窗口、音频、图片解码等第三方组件都打包在 src/external/ 里装一次就能用,换机器、换环境不用追系统库版本
纯 C99,单头文件入口整个库只暴露 src/raylib.h,函数名直白看函数名就懂用法,报错时能直接翻源码
一套代码多平台同一工程可编译到 Windows、macOS、Linux、Android、树莓派、Web(HTML5)PC 上写完,同一份代码丢进浏览器或开发板
2D/3D/音频/着色器内置绘图、纹理、3D 模型、声音、后期特效都在同一个库里一个小游戏的全套需求一个库搞定,不用东拼西凑

当前稳定版本已是 6.0,新项目直接用它即可;升级旧项目时查一下 CHANGELOG 就知道 API 动了什么。

🚀 10 分钟装好并跑起第一个窗口

三种安装方式怎么选:按系统对号入座

每种都是一行命令,装完即可编译:

# Debian/Ubuntu sudo apt install libraylib-dev # Arch sudo pacman -S raylib # macOS brew install raylib # Windows(Chocolatey) choco install raylib

想要最新特性或定制编译,就自己从源码构建:执行git clone https://gitcode.com/GitHub_Trending/ra/raylib拿到代码,再照着 projects/CMake/ 里的 CMake 模板配置构建。

最小示例怎么写:复制、保存、编译

新建my_first_scene.c,把下面这段贴进去。它的"初始化 → 循环 → 绘制 → 退出"骨架可以原样套用到任何游戏上:

#include "raylib.h" int main(void) { InitWindow(800, 450, "my first scene"); SetTargetFPS(60); while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(SKYBLUE); DrawText("hello, raylib", 330, 210, 30, NAVY); EndDrawing(); } CloseWindow(); return 0; }

一行编译、一行运行:

gcc my_first_scene.c -o my_first_scene -lraylib ./my_first_scene

窗口弹出来、天蓝底上一行字,说明环境通了:

🗺️ 能力地图:每个功能在哪找

raylib 按模块组织代码,仓库共 212 个示例,每个都带 1–4 星的难度标注。想要某个功能,先按下表定位源码文件,再去 examples/ 找对应示例:

模块负责什么源码位置
core窗口、输入、计时、文件src/rcore.c
shapes2D 线、圆、多边形、渐变src/rshapes.c
text字体加载与文本绘制src/rtext.c
textures图片、RenderTexture、NPatchsrc/rtextures.c
models3D 模型(glTF/IQM/M3D)、材质、骨骼动画src/rmodels.c
audio声音与音乐流式播放src/raudio.c
rlgl可单独使用的 OpenGL 抽象层src/rlgl.h
raymath向量、矩阵、四元数运算src/raymath.h
rcamera2D/3D 相机与控制src/rcamera.h

🎮 典型场景实操

2D 场景:用输入 + 绘制搭一个游戏骨架

会写"循环里先更新、再绘制",离任何 2D 游戏都不远了。最小骨架:

Vector2 ballPos = (Vector2){ 400.0f, 225.0f }; while (!WindowShouldClose()) { if (IsKeyPressed(KEY_UP)) ballPos.y -= 8.0f; if (IsKeyPressed(KEY_DOWN)) ballPos.y += 8.0f; BeginDrawing(); ClearBackground(BLACK); DrawCircleV(ballPos, 20.0f, GOLD); DrawText("方向键控制", 20, 20, 20, RAYWHITE); EndDrawing(); }

跑通之后,碰撞、计分、关卡都只是往绘制前多加几行。想看 2D 相机怎么滚动一张大地图:

3D 场景:几行相机设置,摆放体观察

配置一个相机,在BeginMode3D里就能从任意角度看 3D 几何:

Camera3D cam = { .position = (Vector3){ 6.0f, 6.0f, 6.0f }, .target = (Vector3){ 0.0f, 1.0f, 0.0f }, .up = (Vector3){ 0.0f, 1.0f, 0.0f }, .fovy = 45.0f, .projection = CAMERA_PERSPECTIVE, }; BeginMode3D(cam); DrawCylinderEx((Vector3){ 0,0,0 }, (Vector3){ 0,2,0 }, 1.0f, 1.0f, 10, 20, ORANGE); DrawGrid(10, 1.0f); EndMode3D();

模型加载、材质、动画的完整写法在 examples/models/ 里。

⚠️ 避坑指南:构建后最常见的 5 个问题

1. 症状:编译报raylib.h: No such file or directory排查:头文件不在包含路径,或只装了运行时库没装开发包。 解决:确认装的是开发包,编译时带上链接参数gcc mygame.c -o mygame -lraylib;系统里有 pkg-config 的话,直接用pkg-config --cflags --libs raylib取参数。

2. 症状:编译通过,但窗口一片空白或启动即退排查:raylib 默认要 OpenGL 3.3 core,远程桌面、虚拟机和老显卡往往只有 2.1。执行glxinfo | grep "OpenGL version"确认本机能力。 解决:降版本或改用软件渲染后端重新构建:cmake -B build -DOPENGL_VERSION="2.1",也可以把2.1换成Software

3. 症状:程序出声位全静默排查:音频模块没被编进去,或 Linux 上缺少 ALSA/PulseAudio 运行时。 解决:用-DCUSTOMIZE_BUILD=ON -DUSE_AUDIO=ON重新构建,Debian/Ubuntu 上补装 ALSA 开发包。

4. 症状:Windows 上运行提示找不到 raylib.dll排查:动态库构建,可执行文件旁边没有放 dll。 解决:把 raylib.dll 复制到 exe 同目录,或改用静态链接构建。

5. 症状:DrawText 里的中文、表情显示成方块排查:内置默认字体的字符集只覆盖基础拉丁文。 解决:Font cn = LoadFont("你的中文字体.ttf"),改用DrawTextEx绘制即可。

🛠️ 进阶建议:性能、跨平台、调试三步走

  1. 性能:2D 游戏把零散小图合成一张纹理图集,减少纹理切换;开发期每帧打印GetFrameTime(),掉帧当场就能发现。
  2. 跨平台:路径用GetApplicationWorkDir()之类函数拼出来,别写死;用SetWindowSize()适配不同分辨率;音频优先选 WAV、OGG 这类各端都支持好的格式。
  3. 调试:SetTraceLogLevel(LOG_DEBUG)打开详细日志,SetTraceLogCallback把日志接到自己的处理函数;追内存问题时用-DENABLE_ASAN=ON重新构建,让 AddressSanitizer 替你查。

📚 学习路线:从跑示例到写出自己的游戏

  1. 入门:把 examples/core/ 里的窗口、相机、输入示例逐个跑起来,每个都能独立编译,改着玩。
  2. 进阶:按 examples/shapes/ → examples/textures/ → examples/text/ 的顺序过一遍 2D 素材,然后写一个自己的小游戏。
  3. 深入:进 examples/models/ 和 examples/shaders/ 接触 3D 模型与后期处理;想精细控制渲染,直接读独立的 src/rlgl.h 接口。
  4. 查资料:src/raylib.h 里的函数清单和注释就是 API 参考,版本变化看 CHANGELOG,社区入口见 README.md。

音频模块支持 WAV、OGG、MP3、FLAC 等格式的流式播放,效果可以直接听:

🏁 收尾:照这份清单动手

raylib 把"写代码就能看见画面"这件事压到了最短路径,剩下的就是你的游戏本身。

  • 按系统装好 raylib,编译并运行最小示例
  • 从 examples/core/ 和 examples/shapes/ 各跑一个示例
  • 改示例里的文本和颜色,再加点输入交互
  • 试一遍 2D 绘制与 3D 相机两段代码
  • 把踩过的坑记进自己的笔记

【免费下载链接】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 12:40:17

微信聊天记录导出完整教程:如何把三年对话存成一份可搜索的存档

微信聊天记录导出完整教程:如何把三年对话存成一份可搜索的存档 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending…

作者头像 李华
网站建设 2026/9/2 12:39:18

Ubuntu20.04安装 mysql8.0.32

检查删除原有的mysql(可以不做,自己记录) 1、 下载 MySQL :: Download MySQL Community Server (Archived Versions) wget https://cdn.mysql.com/archives/mysql-8.0/mysql-server_8.0.32-1ubuntu20.04_amd64.deb-bundle.tar 2、解压到指定目录下 tar xvf mysq…

作者头像 李华
网站建设 2026/9/2 12:38:49

一按遥控器就能换台:my-tv 电视直播应用装与用要点

一按遥控器就能换台:my-tv 电视直播应用装与用要点 【免费下载链接】my-tv 我的电视 电视直播软件,安装即可使用 项目地址: https://gitcode.com/GitHub_Trending/my/my-tv 家里的智能电视只带一个遥控器,你想让它在沙发上像机顶盒一样…

作者头像 李华
网站建设 2026/9/2 12:38:42

AI 助手团队协作怎么落地:OMX 用 5 个阶段把并行开发管住

AI 助手团队协作怎么落地:OMX 用 5 个阶段把并行开发管住 【免费下载链接】oh-my-codex OmX - Oh My codeX: Your codex is not alone. Add hooks, agent teams, HUDs, and so much more. 项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-codex 3 个…

作者头像 李华