新闻详情

新闻详情

首页 / 资讯中心 / 详情

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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Create React App 如何添加 Flow 静态类型检查并配置 .flowconfig 2026/9/9 17:57:31

Create React App 如何添加 Flow 静态类型检查并配置 .flowconfig

Create React App 如何添加 Flow 静态类型检查并配置 .flowconfig 【免费下载链接】create-react-app Set up a modern web app by running one command. 项目地址: https://gitcode.com/gh_mirrors/cr/create-react-app Flow 是一个静态类型检查器,用于帮助…

阅读更多 →
旧款 Mac 如何安装最新 5 个 macOS 版本:OpenCore Legacy Patcher 完整教程 2026/9/9 17:57:31

旧款 Mac 如何安装最新 5 个 macOS 版本:OpenCore Legacy Patcher 完整教程

旧款 Mac 如何安装最新 5 个 macOS 版本:OpenCore Legacy Patcher 完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patc…

阅读更多 →
tiny11builder 实测:Windows 11 精简后游戏帧率提升 12.6%,安装镜像直接减半 2026/9/9 17:57:31

tiny11builder 实测:Windows 11 精简后游戏帧率提升 12.6%,安装镜像直接减半

tiny11builder 实测:Windows 11 精简后游戏帧率提升 12.6%,安装镜像直接减半 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 先说结论&…

阅读更多 →
Python列表高频方法全解析:从append到列表推导式实战指南 2026/9/9 17:57:31

Python列表高频方法全解析:从append到列表推导式实战指南

从入门到实战,聊聊Python列表(List)那些高频方法Python的列表(List)是我日常写脚本、做数据处理时用得最多的内置数据结构,没有之一。不管你是刚开始学Python,还是已经写了一段时间但总感觉对列…

阅读更多 →
分布式存储架构深度解析:从数据切分到容灾机制,构建PB级可靠存储底座 2026/9/9 17:57:31

分布式存储架构深度解析:从数据切分到容灾机制,构建PB级可靠存储底座

1. 内容整体设计与思路拆解1.1 “海纳数据”背后的存储困境拿到“霄云碧海分布式存储”这个名字的时候,我第一反应是这家团队对存储的理解确实有点东西。“霄云”对应的是云上资源,强调的是存储系统在云环境中的适应能力;“碧海”对应的是数据…

阅读更多 →
AI编程依赖过深,开发者技能退化如何自救? 2026/9/9 17:54:30

AI编程依赖过深,开发者技能退化如何自救?

这个话题我得先泼一盆冷水。Anthropic最近把关于AI编程与开发者技能的调研结论放了出来,几乎算是给所有天天用AI写代码的程序员敲了一记警钟:依赖越深,能力退得越快。这不是什么危言耸听,报告里关于代码重复率上升、开发者审查工作…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞