资讯详情

raylib raylib raygui 实战入门 0→1:给 C 游戏接上可拖可点的设置面板

📅 2026/9/9 17:21:18 | 华诺云谱 👁 阅读
raylib raylib raygui 实战入门 0→1:给 C 游戏接上可拖可点的设置面板
raylib raylib raygui 实战入门 0→1给 C 游戏接上可拖可点的设置面板【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib先纠正一下raylib 的 raygui 实战入门 0→1 从 3 分钟跑通一个设置面板开始。你的 C 游戏有窗口了可一要做设置界面要么手画矩形加手动命中检测要么拖一整套重型 UI 框架。raylib 官方附带的单文件模块 raygui 用十几行代码解决GuiSliderBar、GuiCheckBox一画就有控件、状态、输入全打包不用写事件回调。本文带你从 0 到 1 跑通 raygui 的用法。为什么选 raygui零回调的单文件 GUIraygui 是 raylib 的即时模式 GUI 层一个头文件塞了 25 个控件滑块、下拉框、颜色盘、滚动面板v5.0 起支持独立后端。对比传统 retained 模式组件库你不再注册回调、绑定属性、管组件生命周期而是把变量直接递给函数函数画完顺手把本帧操作写回变量。省掉的是回调布线和所有权这两大块心智负担。3 分钟跑通 raygui最小可运行示例先复制一份头文件仓库里 examples/shapes/ 等每个示例目录都放着同一个raygui.h拷一份进你的src/。#include raylib.h #define RAYGUI_IMPLEMENTATION // 只在一个 .c 文件里定义实现才编进程序 #include raygui.h int main(void) { InitWindow(640, 360, raygui demo); float volume 60.0f; // 0~100 的音量 bool showHelp true; while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(RAYWHITE); // 第 1 参是自己的 Rectangle后两参是左标签与当前值 GuiSliderBar((Rectangle){ 40, 60, 240, 24 }, Volume, TextFormat(%.0f%%, volume), volume, 0.0f, 100.0f); // 只在用户点击的那一帧返回 true if (GuiCheckBox((Rectangle){ 40, 100, 20, 20 }, Show help, showHelp)) ShowTraceLog(help toggled, LOG_INFO); if (showHelp) DrawText(Drag the slider to change volume, 40, 150, 20, BLACK); EndDrawing(); } CloseWindow(); return 0; }Linux 下gcc demo.c -lraylib -lm -lpthread -o demo即可Windows 按 examples 目录的 Makefile 流程。三句话RAYGUI_IMPLEMENTATION全项目只定义一次每个控件第一个参数都是它自己的Rectangle坐标尺寸全靠它控件返回本帧是否被操作新值通过指针参数回写。即时模式原理为什么每帧都要重画把 raygui 想成一个每帧都换新人的失忆服务员他不记得你是谁所以每帧重新问一遍——你带来的点单变量、盘子大小控件矩形上完菜他告诉你这帧做了什么返回值。服务员没有记忆点单是唯一真相这就是即时模式声明即渲染控件本身不保存任何状态。边界也在这条线上命中检测、绘制、值回写归 raygui变量定义、坐标布局、业务逻辑全归你。按目的选控件raygui 滑块、复选框与下拉框️ 连续数值调节raygui 滑块的用法float fov 45.0f; // 第 2、3 个文本参数是左标签和当前值自己 TextFormat 好再传 GuiSliderBar((Rectangle){ 40, 80, 220, 20 }, FOV, TextFormat(%.0f°, fov), fov, 30.0f, 90.0f);连续量用GuiSliderBarmin/max 是闭区间端点value 是float*。✅ 开/关切换复选框与 Toggle 的一次性语义bool paused false; bool fullscreen false; // 返回 true 的那一帧正是点击瞬间适合触发一次动作 if (GuiCheckBox((Rectangle){ 40, 120, 20, 20 }, Pause, paused)) ShowTraceLog(pause toggled, LOG_INFO); // Toggle 是按钮形态的开关适合当面板角落的状态指示 GuiToggle((Rectangle){ 40, 160, 120, 30 }, Fullscreen, fullscreen);GuiCheckBox的返回值是一次性事件做触发器GuiToggle是常驻状态钮只关心按钮本身亮没亮时可以不看返回值。 多选项选择raygui 下拉框的用法bool zoneOpen false; // 开合状态自己存每帧回传 int zone 0; // 选中项下标从 0 开始 GuiDropdownBox((Rectangle){ 40, 200, 160, 30 }, Easy;Normal;Hard, zone, zoneOpen);选项用分号拼成一个字符串editMode那个 bool 是控件唯一的临时记忆不自己存着回传列表一松手就消失。 真实组合官方示例里的 raygui 控制台仓库饼图示例右侧是一整块 raygui 控制台spinner 调切片数、复选框切显示模式、滑块控内环半径、GuiScrollPanel里每行一个滑块。// 面板锚点推导出每个控件的 Rectangle示意 const float px 525.0f, py 5.0f; GuiSpinner((Rectangle){ px 95, py 12, 125, 25 }, Slices, sliceCount, 1, 10, false); GuiCheckBox((Rectangle){ px 20, py 52, 20, 20 }, Values, showValues); if (showDonut) GuiDisable(); // 全局开关整体禁用后续控件 GuiSliderBar((Rectangle){ px 80, py 142, 170, 30 }, Inner Radius, NULL, innerR, 5.0f, 195.0f); GuiEnable();控件只负责向用户要参数饼本身仍由你调DrawCircleSector画出来。完整源码见 examples/shapes/shapes_pie_chart.c。raygui 避坑速查5 个高频坑下拉框一松手就消失 →editMode是入参状态控件内部不存开合 → 声明一个bool自己维护每帧原样回传。两个重叠控件互抢点击 → raygui 用全局guiState共享本帧鼠标按压先画出的控件先消费 → 用GuiLock()/GuiUnlock()锁住非活动层控件。spinner 只能点加减、不能打字 →GuiSpinner最后一个editMode传了 false键盘输入被关 → 传 true 才允许直接键入数值。窗口一拉大布局就错位 → 头文件 LIMITATIONS 明确无自动布局坐标全是你硬编码 → 每帧从GetScreenWidth/Height反推锚点控件相对锚点排布。GuiDisable()后界面没恢复 → 两者只单向切换全局状态调用次数不平衡 → 成对调用且注意条件分支里别多调一次GuiEnable()。三步接入拷贝、定义、编译git clone https://gitcode.com/GitHub_Trending/ra/raylib从 examples 任一目录拷raygui.h进你的src/。挑一个.c在#include raygui.h之前写#define RAYGUI_IMPLEMENTATION其余文件只#include。编译时链接 raylib如gcc demo.c -lraylib -o demoCMake/Makefile 工程照官方流程走。设计哲学一句话控件无记忆每帧即声明——记住每帧声明、变量为准界面删了重写都不心疼。下一步值得玩的用GuiSetStyle和GuiLoadStyle换一套自定义配色字体或者照饼图示例的滚动面板 逐行滑块模式给自己项目搭个数据编辑面板。【免费下载链接】raylibA simple and easy-to-use library to enjoy videogames programming项目地址: https://gitcode.com/GitHub_Trending/ra/raylib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。