ImGui Learn Data Day 1

news/2025/11/23 23:58:58/文章来源:https://www.cnblogs.com/Reisentyan/p/19261919

ImGui Learn data Day 1

image

        ImGui::Begin("Hello Gui");static float u = 0;static bool an = 0;if (ImGui::CollapsingHeader("Settings"))//展开条{//如果点击就展开或者关闭ImGui::SliderFloat("滑块", &u, 0.0, 10.0);ImGui::Checkbox("按钮", &an);}//下拉菜单const char* items[] = { "op1","op2","op3" };static int select = 0;//记录当前选的是哪个if (ImGui::Combo("choose one", &select, items, IM_ARRAYSIZE(items)));//最后一个是计算数组大小的	{ImGui::Text("check then open");}ImGui::SameLine();//上面的和下面的保持在同一行ImGui::BeginGroup();//用于把组件分个组 当需要对齐的时候可以一起对齐ImGui::Text("check then open1");ImGui::Text("check then open2");ImGui::Text("check then open3");ImGui::Button("ppp");//拖动组件static float va = 0.0f;ImGui::DragFloat("Drag me", &va, 0.001f, 0.0f, 10.0f);//第三个是步长//颜色选择器ImGui::ColorEdit3("color picker ", color);ImGui::EndGroup();//给组件分个组,begin和end中间的会被放到一起ImGui::End();
方法 注释
CollapsingHeader() 这是一个展开条,点击可以展开里面的组件,放在if的括号里面
Combo() 和展开条类似,只是展开之后可以选择东西,也是放在if里面,需要一个char*数组记录里面有什么可选的
SameLine() 这个组件的前一个组件和后一个组件放在同一行
DragFloat() 没有滑块的滑条,可以和滑块类似,拖动组件
ColorEdit3() 三个参数的颜色选择器,rgb,可以拿来选择各种颜色
BeginGroup()
EndGroup()
给组件分组的时候用,这两个中间的组件被视作为一组

实践作业:

作业要求:创建一个“游戏设置面板”

你需要创建一个界面,模拟一个游戏中的设置面板,可以让用户调整游戏参数。这个面板将包含以下几个部分:


1. 游戏基本设置

  • 音量控制:使用滑条(SliderFloat)来控制音量。
  • 画面亮度:使用滑条(SliderFloat)来控制画面亮度。
  • 是否开启背景音乐:使用复选框(Checkbox)来决定是否开启背景音乐。

2. 游戏控制设置

  • 鼠标灵敏度:使用浮动滑条(SliderFloat)来调整鼠标灵敏度。
  • 键盘布局选择:使用下拉菜单(Combo)让用户选择键盘布局(例如:QWERTYAZERTYDVORAK)。
  • 控制模式切换:使用一个按钮(Button)来切换控制模式(例如从“标准模式”切换到“飞行模式”)。

3. 显示设置

  • 分辨率选择:提供几个不同的分辨率选项,使用下拉菜单(Combo)进行选择。
  • 全屏模式:使用复选框(Checkbox)来选择是否启用全屏。

4. 保存设置

  • 使用一个按钮(Button)来保存用户的设置。点击后弹出一个消息框,显示用户设置的内容。

额外要求

  • 界面布局:确保各个设置项有良好的布局,适当使用 CollapsingHeaderBeginGroup/EndGroup 来组织内容。
  • 数据持久化:你可以使用静态变量(如 static)来保存用户设置,这样在不同的帧之间可以保持这些设置。

实现思路

  1. 创建窗口:你需要一个主窗口来承载这些设置。
  2. 音量与亮度:使用滑条来控制数值,并显示在文本中。
  3. 复选框:控制音乐是否开启,背景是否为全屏。
  4. 下拉菜单:让用户选择键盘布局和分辨率。
  5. 保存设置:点击按钮时弹出消息框,展示保存的设置。

代码结构大致框架

ImGui::Begin("Game Settings Panel");// 1. 游戏基本设置
if (ImGui::CollapsingHeader("Basic Settings"))
{static float volume = 0.5f;ImGui::SliderFloat("Volume", &volume, 0.0f, 1.0f);static float brightness = 1.0f;ImGui::SliderFloat("Brightness", &brightness, 0.0f, 2.0f);static bool musicEnabled = true;ImGui::Checkbox("Enable Background Music", &musicEnabled);
}// 2. 游戏控制设置
if (ImGui::CollapsingHeader("Control Settings"))
{static float mouseSensitivity = 1.0f;ImGui::SliderFloat("Mouse Sensitivity", &mouseSensitivity, 0.1f, 10.0f);const char* layouts[] = { "QWERTY", "AZERTY", "DVORAK" };static int selectedLayout = 0;ImGui::Combo("Keyboard Layout", &selectedLayout, layouts, IM_ARRAYSIZE(layouts));static bool flightMode = false;if (ImGui::Button(flightMode ? "Switch to Standard Mode" : "Switch to Flight Mode")){flightMode = !flightMode;}
}// 3. 显示设置
if (ImGui::CollapsingHeader("Display Settings"))
{const char* resolutions[] = { "1920x1080", "1280x720", "800x600" };static int selectedResolution = 0;ImGui::Combo("Resolution", &selectedResolution, resolutions, IM_ARRAYSIZE(resolutions));static bool fullscreen = false;ImGui::Checkbox("Fullscreen", &fullscreen);
}// 4. 保存设置
if (ImGui::Button("Save Settings"))
{// 这里可以模拟保存设置,并弹出一个消息框ImGui::OpenPopup("Settings Saved");
}if (ImGui::BeginPopupModal("Settings Saved", NULL, ImGuiWindowFlags_AlwaysAutoResize))
{ImGui::Text("Settings have been saved:");ImGui::Text("Volume: %.2f", volume);ImGui::Text("Brightness: %.2f", brightness);ImGui::Text("Music: %s", musicEnabled ? "Enabled" : "Disabled");ImGui::Text("Mouse Sensitivity: %.2f", mouseSensitivity);ImGui::Text("Keyboard Layout: %s", layouts[selectedLayout]);ImGui::Text("Mode: %s", flightMode ? "Flight Mode" : "Standard Mode");ImGui::Text("Resolution: %s", resolutions[selectedResolution]);ImGui::Text("Fullscreen: %s", fullscreen ? "Enabled" : "Disabled");if (ImGui::Button("Close"))ImGui::CloseCurrentPopup();ImGui::EndPopup();
}ImGui::End();

任务要求:

  1. 实现并完善上面的框架,确保每个功能都能正确工作。
  2. 提交时,提供:
    • 完整的代码
    • 截图或视频,展示界面效果

这个任务将帮助你巩固所学的 ImGui 技能,并加深你对界面布局、交互以及控件的使用掌握。完成后,你会更自信地使用 ImGui 来制作更加复杂和实用的用户界面。如果你在完成过程中遇到问题,随时可以向我询问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OI 笑传 #34

夜の東側今天是 bct Day4,赛时 \(75+30+40+0=115\),rk 54。 T1 挂分原因仍未知,直接原因是没有大样例,然后是用数据结构维护的贪心,比较恶心。 赛时比较爆炸,T1 连想带调用了 3h,导致比较简单的 T2,T3,T4 没有…

【MCP系列】介绍一个我自己开发的MCP工具:MCP Shipit

【MCP系列】介绍一个我自己开发的MCP工具:MCP Shipit介绍一个我自己开发的MCP工具:MCP Shipit,欢迎来github提issue,star!在AI编辑器日益普及的今天,我们可以通过自定义工具来扩展AI的能力。本文将介绍如何从零开…

第34天(简单题中等题 数据结构)

打卡第三十四天 1道简单题+两道中等题题目:思路:哈希表+遍历 代码: class Solution{ public:int maxSum(vector<int>& nums){unordered_map<int,int> hash;int ans = -1;for(int x: nums){int maxd…

3. Gin RESTful API 开发

3. Gin RESTful API 开发 3.1 RESTful API简介 3.1.1 RESTful API 定义REST(Representational State Transfer,表现层状态转换)是一种软件架风格、设计风格,而不是一种标准。它提供了一组设计原则和约束条件,主要用…

说课逐字稿2

尊敬的各位评委老师: 大家好!今天我说课的题目是《健康数据小哨兵——循环选择嵌套》。 面对海量健康数据,如何从“人工低效核对”跨越到“智能精准监测”?这是本课要解决的核心问题。我将从分析策略、教学过程、教…

Codeforces Round 1066 (Div. 1 + Div. 2) 做题记录

Dashboard - Codeforces Round 1066 (Div. 1 + Div. 2) - Codeforces Problem - A - Codeforces 题意: 平衡数组定义为:若 \(x\) 存在,则存在 \(x\) 个 \(x\),求给定数组至少删去多少数变成平衡数组。 题解: 若 \…

2025.11.23总结

一些思考和建议 1. 现状分析:从“稀缺”到“饱和”的本质 过去的“高工价”源于互联网和移动互联网的爆炸性增长,对代码的渴求是海量的。那时,一个能实现功能的程序员就是稀缺资源。 现在的“不稀缺”,准确地说,是…

字符串常见操作

字符串常见操作查找: find 字符是否包含在字符串中,在就返回这个子字符串开始位置的下标,否则就返回-1 count 返回出现的次数,返回某个子字符串在整个字符串中出现的次数,没有就返回0 index 和index一样但是会报…

广州比较靠谱的留学中介

广州比较靠谱的留学中介一、广州留学中介怎么选?这些疑问你有吗?作为从事12年国际教育规划师,我经常被广州的学生和家长问到:广州的留学中介哪家更靠谱?申请英国研究生,广州哪家中介成功率更高?广州本地口碑最好…

SpringBoot 2.x - 3.x 踩坑记录

一、现状:JDK17 SpringBoot 2.6.8 Gradle 7.6二、目标:JDK17 gradle 8.10.2 SpringBoot 3.5.6 无漏洞版本三、问题: 1. import javax.*报错 原因:SpringBoot 2.x 使用 javax 规范,SpringBoot 3.x 使用 jakarta 规…

广州比较好的留学机构

广州比较好的留学机构一、广州留学机构怎么选?这五个问题你考虑过吗?作为一位拥有十年经验的国际教育规划师,我经常被广州的学生和家长问及如何挑选留学中介。在选择过程中,许多人会陷入纠结:广州留学机构哪家更靠…

AtCoder Beginner Contest 433 题解

只写了 A-F。A - Happy Birthday! 4 开局就绷不住了,晚上脑子有点不清醒直接暴力 check 到 \(10^7\) 没想到直接过了。代码。但是正解还是要推式子的,设 \(k\) 年后为答案,则有 \(X + k = Z(Y + k)\),移项后得到 \…

使用 Lua 语言识别英文数字验证码

接下来我将使用 Lua 语言来实现类似的功能。Lua 是一种轻量级的嵌入式脚本语言,广泛应用于游戏开发、嵌入式系统等领域。 一、安装与配置安装 Lua 更多内容访问ttocr.com或联系1436423940 可以从 Lua 官网 下载并安装…

广州10大出国留学机构

广州10大出国留学机构作为从事国际教育规划工作十二年的资深顾问,张明,我经常需要为广州的学生和家长解答关于留学机构的选择问题。许多人在搜索时会输入各种疑问,比如广州的留学中介哪家更靠谱?申请美国研究生该选…

北京留学机构,谁知道哪家比较好

北京留学机构,谁知道哪家比较好一、北京留学机构怎么选?先看看大家常问的问题作为一名从事国际教育规划工作超过十二年的专业人士,我经常被学生和家长问到:北京留学机构这么多,到底哪家更好?每次面对这样的疑问,…

北京留学读研中介机构推荐

北京留学读研中介机构推荐一、北京留学读研中介怎么选?这些高频问题帮你避坑作为一位从事国际教育规划工作超过15年的资深顾问,我每天都会收到大量关于北京地区留学中介的咨询。许多学生在选择机构时常常感到迷茫,经…

北京留学机构排行榜

北京留学机构排行榜一、北京留学中介怎么选?听听资深规划师的建议作为专注国际教育领域十一年的前高校就业指导顾问,我每年都会接触到大量计划留学的北京家庭。在2025年11月20日这个时间点,当我们打开搜索引擎输入&…

北京口碑最好的十大留学机构

北京口碑最好的十大留学机构一、如何挑选北京留学中介?这些疑问你有吗?作为一位拥有12年经验的国际教育规划师,我经常遇到北京的学生和家长咨询留学机构的选择问题。大家最常搜索的关键词包括:北京留学中介哪家更靠…