ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

raylib快速上手指南:用C语言从零构建你的第一个2D/3D游戏

raylib快速上手指南:用C语言从零构建你的第一个2D/3D游戏 raylib快速上手指南用C语言从零构建你的第一个2D/3D游戏【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib想象一下这样的场景你脑子里有个小游戏点子但不想被重型引擎的配置流程劝退——没有编辑器、没有资产管线、没有庞大的启动工程只要一个.c文件加一个游戏库就能在 5 分钟内看到画面上出现东西。这正是 raylib 的定位一个跨平台的 C 语言游戏开发库让你把精力全放在游戏逻辑本身。30 秒速览raylib 是什么维度一句话说明它是什么用纯 C99 编写的游戏编程库灵感来自 Borland BGI 与 XNA凭什么值得用零外部依赖第三方库全部内嵌在 src/external/支持 Windows / Linux / macOS / Android / HTML5硬件加速覆盖 OpenGL 1.1 到 4.3 及 ES 2.0/3.0核心模块2D 图形、3D 渲染、纹理与字体、音频、着色器、VR 立体渲染适合谁想快速做原型、教学演示、图形工具或嵌入式演示的开发者也适合第一次写游戏的新手官方态度很斯巴达没有花哨的界面和调试按钮就是纯粹的代码。如果你喜欢这种直接感往下看。拿到代码5 分钟编译出第一个画面第 1 步获取源码。本地包管理器如 vcpkg、Homebrew、apt里也有现成的 raylib 包这里走源码路线git clone https://gitcode.com/GitHub_Trending/ra/raylib cd raylib/src第 2 步编译库。src/ 下的 Makefile 最省事make -j$(nproc)Windows 用户也可以直接打开 projects/VS2022/ 里的解决方案用 CMake 的人可以看 projects/CMake/ 的模板。第 3 步写下第一个窗口。下面是 raylib 最经典的最小示例不到 20 行#include raylib.h int main(void) { InitWindow(800, 450, raylib - first window); while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(RAYWHITE); DrawText(Hello, raylib!, 190, 200, 40, LIGHTGRAY); EndDrawing(); } CloseWindow(); return 0; }编译时把raylib.h所在目录加进包含路径、链接libraylib即可。跑起来你会看到这样一个 800x450 的窗口整个InitWindow→while循环 →BeginDrawing/EndDrawing→CloseWindow的模式就是后面所有例子的骨架。四大能力域拆解每个功能找到对应模块2D 绘制不用画布 API函数即画笔2D 部分全部是直观的DrawXxx系列函数圆、矩形、椭圆、多边形、贝塞尔曲线、虚线……颜色、渐变、描边都有对应变体。DrawCircle(200, 120, 35, DARKBLUE); // 实心圆 DrawEllipse(200, 120, 25, 20, YELLOW); // 椭圆 DrawRectangle(340, 100, 120, 60, RED); // 矩形 DrawLine(50, 400, 750, 400, MAROON); // 直线examples/shapes/shapes_basic_shapes.c 把这些函数一次画了个遍效果大致如下3D 渲染一个相机函数切入立体世界进入 3D 只需声明相机、切到BeginMode3D出来再EndMode3D。模型格式支持 OBJ、glTF/GLB、IQM、M3D、VOX材质系统兼容传统贴图与 PBR 贴图Model model LoadModel(resources/models/obj/castle.obj); Texture2D tex LoadTexture(resources/models/obj/castle_diffuse.png); model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture tex; // 每帧只需一行 DrawModel(model, (Vector3){ 0.0f, 0.0f, 0.0f }, 1.0f, WHITE);examples/models/models_loading.c 还演示了拖放文件热加载模型的玩法纹理与精灵从静态图到动画角色精灵动画的关键是DrawTextureRec——它只画纹理的一个子区域配合一个逐帧移动的Rectangle就是动画Rectangle frameRec { 0, 0, (float)sheet.width/6, sheet.height }; int currentFrame 0; // 更新逻辑每 60/framesSpeed 帧切一帧 frameRec.x currentFrame * (float)sheet.width/6; DrawTextureRec(sheet, frameRec, position, WHITE);这个模式在 examples/textures/textures_sprite_animation.c 里有完整实现左键/右键还能实时调播放速度音频流式音乐 即时音效音频模块支持 WAV、MP3、OGG、FLAC、QOA、MOD 等格式。长音乐用Music流式加载不占爆内存短音效用SoundInitAudioDevice(); Music music LoadMusicStream(resources/audio/background.mp3); // 每帧里 UpdateMusicStream(music); // 推进流式播放 if (IsKeyPressed(KEY_SPACE)) PlaySound(clap);参考 examples/audio/audio_music_stream.c动手做一个15 行逻辑的弹球小游戏光看函数不够下面把 2D 绘制、输入、物理合成一个能跑的小游戏。仓库里现成的 examples/shapes/shapes_bouncing_ball.c 就是这个成品我们拆解它的三段结构1. 初始化状态窗口建好后Vector2 ballPosition { GetScreenWidth()/2.0f, GetScreenHeight()/2.0f }; Vector2 ballSpeed { 5.0f, 4.0f }; float gravity 0.2f; bool useGravity true;2. 更新逻辑while循环内BeginDrawing之前if (IsKeyPressed(KEY_G)) useGravity !useGravity; // G 键切换重力 ballPosition.x ballSpeed.x; ballPosition.y ballSpeed.y; if (useGravity) ballSpeed.y gravity; // 重力加速 // 碰墙反弹水平全反弹垂直损失 5% 能量 if (ballPosition.x GetScreenWidth() - 20 || ballPosition.x 20) ballSpeed.x * -1.0f; if (ballPosition.y GetScreenHeight() - 20 || ballPosition.y 20) ballSpeed.y * -0.95f;3. 绘制BeginDrawing/EndDrawing之间DrawCircleV(ballPosition, 20, MAROON); DrawFPS(10, 10);跑起来的效果——小球在窗口里弹跳按 G 切换重力体会一下 raylib 的分工哲学更新在BeginDrawing之前绘制在BeginDrawing之后物理和画面彻底解耦。你接下来要做的只是往更新里加规则、往绘制里加表现。进阶玩法着色器与立体相机等你玩转了基础模块有两个方向值得立刻尝试着色器LoadShader(base.vs, grayscale.fs)加载自定义 GLSL再套在绘制调用上就能实现灰度化、雾效、延迟渲染、后处理等效果。仓库 examples/shaders/ 里有一整排视觉实验从 Mandelbrot 集合到光照模型都有。相机系统内置第一人称、自由视角、环绕等多种相机模式一行SetCameraMode(camera, CAMERA_FIRST_PERSON)切换配合BeginVrDrawing还能输出 VR 双目渲染HMD 参数可配置。生态与资源示例库examples/ 下 140 个可运行的 C 示例按 core / shapes / textures / models / audio / shaders 分类是官方推荐的第一手文档API 速查官网 raylib.com 提供 cheatsheet列出了每个函数的签名与说明项目模板projects/ 里备好了 VS2022、CMake、CodeBlocks、Geany、Zig、Android 等多套工程模板拿来就能改头文件即文档src/raylib.h 里每个 API 的注释写得相当详细配合 src/raymath.h 的向量/矩阵/四元数数学模块阅读绑定官方维护 70 语言的绑定见 BINDINGS.md下一步做什么按这个顺序走一天内能完成完整的入门闭环编译examples/core/core_basic_window.c确认窗口能开、能关改examples/shapes/里任意一个示例把颜色、参数改成自己的参考本文弹球小节写一个自己规则的游戏比如加两个球、加碰撞计分卡住时直接搜对应模块的示例文件名比如想做 3D 就找models_前缀的文件抄结构。raylib 的门槛低到一个头文件加一段循环而天花板却高到着色器与 VR。把第一个窗口开出来剩下的就是玩的问题了——祝你早日看到自己游戏里那颗会跳的球。【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表