尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

raylib游戏开发库:10 分钟跑通第一个窗口

raylib游戏开发库:10 分钟跑通第一个窗口 raylib游戏开发库10 分钟跑通第一个窗口【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylibraylib 是一个用纯 C99 编写的轻量级游戏开发库3 行代码创建窗口再多几行就能画出 3D 场景。它替你处理窗口、输入、图形和音频这些底层杂事你只写游戏逻辑。适合想快速做原型、教学演示和小工具的人C 语言新手和老手都能直接用。先跑起来3 分钟编译运行你的第一个 raylib 窗口下面这段代码创建一个 800x450 的窗口在画面中间画一行文字按 ESC 或点关闭按钮退出#include raylib.h int main(void) { InitWindow(800, 450, raylib - basic window); SetTargetFPS(60); while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(RAYWHITE); DrawText(Congrats! You created your first window!, 190, 200, 20, LIGHTGRAY); EndDrawing(); } CloseWindow(); return 0; }运行后你会看到一个灰白色窗口中间一行 Congrats! You created your first window!。这就是 raylib 的核心循环初始化 → 循环 → 绘制 → 清理。编译命令按平台选一条先git clone https://gitcode.com/GitHub_Trending/ra/raylib获取源码并构建出 raylib 库gcc -o mygame mygame.c -lraylib -lm -lpthread -ldl gcc -o mygame.exe mygame.c -lraylib -lopengl32 -lgdi32 -lwinmm提示不想手写链接参数时直接编译仓库自带的示例make -C examples或 CMake 构建后运行build/examples/core/core_basic_window改个颜色再跑一遍确认工具链没问题再写自己的代码。raylib 官方示例 core_basic_window 的运行效果它能做什么2D、3D 与音频能力一览2D 形状与纹理渲染。所有矩形、圆、多边形、贝塞尔曲线都有对应的DrawXxx函数纹理和精灵动画同样一个函数搞定DrawRectangle(0, 0, 800, 450, SKYBLUE); // 填充背景 DrawCircle(400, 225, 60, RED); // 画一个圆 DrawText(Hello 2D, 370, 215, 20, WHITE); // 画文字这让你能在一小时内搭出平台跳跃类小游戏的核心画面不用碰一次 OpenGL。3D 场景与模型。内置相机、网格生成器、骨骼动画IQM、M3D、glTF 格式和 PBR 材质BeginMode3D(camera); DrawCube((Vector3){ 0, 0, 0 }, 2.0f, 2.0f, 2.0f, RED); DrawGrid(10, 1.0f); EndMode3D();这让你能直接写第一人称迷宫、低多边形冒险这类 3D 玩法。音频与输入。WAV、OGG、MP3、FLAC 等格式流式加载键盘、鼠标、手柄、手势、多点触摸共用一套IsKeyXxx/IsGestureDetected风格接口InitAudioDevice(); Sound s LoadSound(hit.wav); if (IsKeyPressed(KEY_SPACE)) PlaySound(s);这让你写游戏音效逻辑时完全不用关心底层音频 API 的差异。官方示例 core_2d_camera相机随输入平移场景边界也要先说清别指望它做这些事没有可视化编辑器、场景编辑器或调试按钮一切靠代码文字渲染不支持 RTL 语言、连字和 emoji默认单窗口、单 OpenGL 上下文不做多窗口应用内部结构速览先记住这个源码按功能域拆文件每个功能域一个r前缀的 .c 文件想读哪块直接看对应文件即可raylib/ ├── src/raylib.h # 唯一需要 include 的公共头文件 ├── src/rcore.c # 窗口、输入、文件等核心逻辑 ├── src/rshapes.c # 2D 形状绘制 ├── src/rtextures.c # 纹理、图像处理 ├── src/rmodels.c # 3D 模型、材质、网格 ├── src/rtext.c # 字体与文本 ├── src/raudio.c # 音频加载与播放 ├── src/rlgl.h # OpenGL 抽象层可独立使用 ├── src/raymath.h # 向量/矩阵/四元数纯头文件 ├── src/platforms/ # GLFW、SDL、Win32、Web 等平台后端 ├── examples/ # 140 官方示例按模块分子目录 └── projects/ # VS2022、VSCode 等 IDE 工程模板三个模块可以脱离 raylib 单独使用src/rlgl.h只做 OpenGL 封装src/raymath.h只做数学运算src/external/rlsw.h是不依赖 OpenGL 的软件渲染器。选哪个后端在src/config.h里配。进阶玩法3D 相机、音频与 2D 镜头用自由相机搭 raylib 3D 场景把相机位置、朝向、视野写进Camera3D结构体再用UpdateCamera()接管键盘鼠标// 定义自由相机站在 (10,10,10) 看向原点 Camera3D camera { 0 }; camera.position (Vector3){ 10.0f, 10.0f, 10.0f }; camera.target (Vector3){ 0.0f, 0.0f, 0.0f }; camera.up (Vector3){ 0.0f, 1.0f, 0.0f }; camera.fovy 45.0f; camera.projection CAMERA_PERSPECTIVE; DisableCursor(); // 把鼠标锁成窗口内相对移动 while (!WindowShouldClose()) { UpdateCamera(camera, CAMERA_FREE); // 由键鼠更新相机 BeginDrawing(); ClearBackground(RAYWHITE); BeginMode3D(camera); DrawCube((Vector3){ 0, 0, 0 }, 2.0f, 2.0f, 2.0f, RED); DrawGrid(10, 1.0f); EndMode3D(); EndDrawing(); }运行后滚轮缩放、按住滚轮平移视角。试试把camera.fovy从 45.0f 改成 25.0f透视会明显收紧像换了长焦镜头。更多玩法见examples/core/core_3d_camera_first_person.c和同目录的 fps、free 系列示例。滚轮缩放、按键平移的自由相机示例3 行代码播放游戏音效音频的完整生命周期就四步初始化、加载、播放、卸载InitAudioDevice(); // 初始化音频设备 Sound sound LoadSound(resources/sound.wav); // 加载 WAV while (!WindowShouldClose()) { if (IsKeyPressed(KEY_SPACE)) PlaySound(sound); // 空格重复触发 BeginDrawing(); ClearBackground(RAYWHITE); DrawText(Press SPACE to play, 200, 200, 20, LIGHTGRAY); EndDrawing(); } UnloadSound(sound); CloseAudioDevice();试试把KEY_SPACE换成KEY_ENTER回车键就能触发声音。长音乐请改用LoadMusicStream()流式播放避免整首载入内存examples/audio/audio_music_stream.c里有完整写法。按键触发 WAV 与 OGG 音效的官方示例用 2D 相机平移镜头Camera2D的offset就是镜头位置改它等于移动摄像机Camera2D camera { 0 }; camera.zoom 1.0f; // WASD 四个方向平移镜头 if (IsKeyDown(KEY_W)) camera.offset.y 10.0f * camera.zoom; if (IsKeyDown(KEY_S)) camera.offset.y - 10.0f * camera.zoom; if (IsKeyDown(KEY_A)) camera.offset.x 10.0f * camera.zoom; if (IsKeyDown(KEY_D)) camera.offset.x - 10.0f * camera.zoom; BeginMode2D(camera); DrawRectangle(0, 0, 800, 450, SKYBLUE); DrawText(WASD 平移镜头, 300, 200, 20, WHITE); EndMode2D();试试把 10.0f 改成 30.0f镜头移动速度直接变成三倍。需要鼠标缩放的话看examples/core/core_2d_camera_mouse_zoom.c平台跳跃镜头参考examples/core/core_2d_camera_platformer.c。工程化落地跨平台编译命令与项目结构raylib 用 CMake 一键构建各平台版本构建出的库放进你的工程即可cmake -B build cmake --build build各平台的关键区别只在链接参数上平台编译器关键链接参数WindowsMinGW GCC-lraylib -lopengl32 -lgdi32 -lwinmmLinuxGCC / Clang-lraylib -lm -lpthread -ldlmacOSClang-lraylib -framework OpenGL -framework CocoaWeb (HTML5)Emscriptenemcc 编译为 WASMAndroidNDKCMake 交叉编译大型项目建议这样组织目录资源与逻辑分开方便按平台换资源包mygame/ ├── src/ │ ├── main.c # 入口初始化与主循环 │ ├── game.c # 游戏逻辑 │ └── render.c # 渲染相关代码 ├── resources/ │ ├── textures/ │ └── audio/ └── CMakeLists.txt # 构建配置raylib 库文件.a / .so / .lib能找到编译器不再报-lraylib错误示例资源用相对路径引用换目录运行不出问题SetTargetFPS(60)已设置后台切走时 CPU 占用正常踩坑速查高频问题对照表报 cannot find raylib.h 或 -lraylib: no such file先检查两个路径参数头文件目录加-I库文件目录加-L。库文件名注意平台差异Linux 是libraylib.soWindows 是raylib.dllraylib.lib。Linux 启动即退出控制台有 OpenGL 报错先运行glxinfo | grep version确认驱动 OpenGL 版本达到 3.3不够就更新显卡驱动。没有独显的机器可换软件渲染后端rlsw再试。窗口 resize 或拖动后画面卡住这是设计行为支持窗口的平台上缩放和移动会暂停渲染循环。示例因此普遍用固定分辨率需要动态尺寸时把画面画进RenderTexture再缩放到屏幕。文字出现方框、中文或 emoji 显示不出来默认字体不含这些字形。用LoadFont(你的字体.ttf)加载包含对应字符集的字体替换DrawText前的默认字体即可。帧率低于SetTargetFPS设置值先在画面角落画DrawFPS(10, 10)确认实际帧率再逐条排查单次绘制调用是否过多、是否每帧重复LoadTexture、纹理尺寸是否远超实际需要。选哪个版本 接下来往哪走版本环境最低要求标志性新特性推荐场景6.0 (2026-04)OpenGL 3.3或 rlsw 软件渲染软件渲染器后端、新文件系统 API、骨骼动画重设计新项目5.5 (2024-11)OpenGL 3.3RGFW / SDL3 平台后端、GPU Skinning多后端需求5.0 (2023-11)OpenGL 3.3raymath C 运算符、Dreamcast 等平台老项目过渡4.5 (2023-03)OpenGL 3.3成熟的 2D/3D 与 PBR 材质教学演示新项目直接用 6.0旧教程里的 API 绝大多数兼容遇到差异对照CHANGELOG的-WARNING-标记改即可。开发中的 6.2 在重设计 Image API对齐 Texture API 命名和 File API 返回值跨大版本升级前先看CHANGELOGrlsw软件渲染器持续增强双缓冲、ESP32 优化让无 OpenGL 的嵌入式场景可用性变好现在就可以做的 3 件事编译examples/core/core_basic_window.c把RAYWHITE换成SKYBLUE再运行一次把上文自由相机示例的camera.fovy从 45.0f 改成 25.0f观察透视变化翻一遍examples/各子目录的文件名挑一个和你目标玩法最近的例子当起点打开代码从窗口开始写。【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表