挂机放置类游戏开发学习 Part.2 基础组件

news/2026/1/17 16:47:43/文章来源:https://www.cnblogs.com/Noivelist/p/19496616

恭喜你成功完成环境搭建并运行出预期效果!这是一个非常棒的里程碑,现在完全可以顺利进入《基础组件》阶段了,这个阶段的核心是掌握 ImGUI\(3\) 个核心基础组件(TextButtonProgressBar),并落地到挂机游戏的核心数值展示与简单交互,咱们一步步推进,全程基于你现有的代码扩展,不破坏原有框架。

基础组件阶段核心目标回顾(落地挂机游戏)

  • ImGui::Text 稳定展示挂机游戏核心数值:金币、等级、每秒收益;
  • ImGui::Button 实现交互功能:收取金币、升级建筑(修改对应游戏数值);
  • ImGui::ProgressBar 展示挂机进度(比如 “下次自动收益倒计时”“建筑升级冷却”);

核心要求:组件排版整齐,交互能实时修改数值,效果直观可见。

步骤 1:先准备游戏核心全局变量(存储数值)

main.cpp中,先定义几个全局变量(方便帧循环中读写,后续进阶再优化为模块化),放在main函数外部(保证作用域覆盖整个程序),代码如下:

// 新增:挂机游戏核心全局变量(放在main函数外面,顶部或头文件中)
float g_gold = 0.0f;          // 当前金币(用float方便后续小数收益累加)
int g_level = 1;              // 当前等级
float g_gold_per_second = 1.0f; // 每秒自动收益
float g_afk_progress = 0.0f;  // 挂机进度(0.0f ~ 1.0f,对应ProgressBar的0% ~ 100%)
const float g_progress_max = 1.0f; // 挂机进度最大值(固定为1.0f,ImGui ProgressBar默认范围)// 原有头文件和宏定义不变
#define SDL_MAIN_HANDLED
#include <SDL.h>
#include <gl/GL.h>
#include "imgui.h"
#include "imgui_impl_sdl2.h"
#include "imgui_impl_opengl3.h"

步骤 2:实现 ImGui::Text —— 展示核心游戏数值

在原有ImGui::Begin("挂机游戏主面板")和ImGui::End()之间,替换原有简单文本,添加精准的数值展示,支持中文(前提是你已加载中文字体)。

核心代码(替换原有 UI 绘制部分)

// 3. 绘制ImGUI UI(核心:替换为基础组件展示)
ImGui::Begin("挂机游戏主面板"); // 创建一个窗口// 新增:用ImGui::Text展示核心数值(排版整齐,添加说明文字)
ImGui::Text("当前金币:%.2f", g_gold); // %.2f 保留2位小数,避免数值过长
ImGui::Text("当前等级:%d", g_level);   // %d 展示整数(等级)
ImGui::Text("每秒收益:%.2f 金币/秒", g_gold_per_second);// 原有简单文本可保留或删除
ImGui::Text("Hello, 挂机游戏!");ImGui::End(); // 结束窗口绘制

关键说明

ImGui::Text 支持格式化输出,和 C 语言的printf语法一致,常用格式:

  • %d:整数(等级、建筑数量等);
  • %f:浮点数(金币、收益等),%.2f 可控制保留 \(2\) 位小数,更美观;
  • %s:字符串(后续可扩展角色名称等);

文本会自动跟随窗口排版,无需手动调整位置,后续布局阶段再优化对齐。

步骤 3:实现 ImGui::Button —— 实现交互功能(收取金币、升级建筑)

ImGui::Button 的核心是:判断按钮是否被点击(返回值为 bool,点击时返回 true),点击后修改对应的游戏全局变量即可实现交互。

核心代码(添加到 Text 之后,End 之前)

// 新增:用ImGui::Button实现交互(换行分隔,排版更清晰)
ImGui::Spacing(); // 添加空白间距,分隔文本和按钮
ImGui::Separator(); // 添加分割线,优化排版
ImGui::Spacing();// 按钮1:收取金币(点击后,金币 += 10 * 每秒收益,简单逻辑)
if (ImGui::Button("收取金币")) {// 按钮被点击时执行的逻辑g_gold += 10 * g_gold_per_second;// 可选:重置挂机进度(收取后重新开始累计)g_afk_progress = 0.0f;
}// 按钮2:升级建筑(点击后,等级+1,每秒收益提升,需要消耗金币)
ImGui::SameLine(); // 让按钮在同一行显示(可选,优化排版)
if (ImGui::Button("升级建筑(消耗100金币)")) {// 先判断金币是否足够,避免负数if (g_gold >= 100.0f) {g_level += 1;g_gold_per_second += 0.5f; // 每级提升0.5金币/秒g_gold -= 100.0f; // 扣除升级消耗}
}

关键说明

  • ``ImGui::Button("按钮文本") 返回true`仅在当前帧被点击时生效,逻辑执行一次,符合交互预期;
  • ImGui::Spacing():添加垂直空白间距,让 UI 更松散美观,避免组件拥挤;
  • ImGui::Separator():绘制一条水平分割线,分隔不同功能区域;
  • ImGui::SameLine():让下一个组件在当前组件的同一行显示(不换行),适合多个按钮并排;
  • 升级建筑添加了 “金币足够判断”,这是挂机游戏的基础逻辑,避免出现不合理的负数金币。

步骤 4:实现 ImGui::ProgressBar —— 展示挂机进度

ImGui::ProgressBar 用于展示进度条,核心参数是当前进度0.0f ~ 1.0f),还可以添加额外文本说明进度含义。

核心代码(添加到 Button 之后,End 之前)

// 新增:用ImGui::ProgressBar展示挂机进度(先更新进度,再绘制)
ImGui::Spacing();
ImGui::Separator();
ImGui::Spacing();// 先更新挂机进度(每帧累加少量数值,模拟时间流逝)
// 0.001f 控制进度条填充速度,可根据需要调整
g_afk_progress += 0.001f;
// 限制进度在0.0f ~ 1.0f之间,避免溢出
if (g_afk_progress > g_progress_max) {g_afk_progress = g_progress_max;// 可选:进度满时自动增加金币(模拟自动挂机)g_gold += g_gold_per_second;g_afk_progress = 0.0f; // 重置进度,循环累计
}// 绘制进度条(核心:第一个参数是当前进度/最大值,第二个参数是进度条尺寸)
ImGui::Text("挂机自动收益进度:");
ImGui::ProgressBar(g_afk_progress / g_progress_max, ImVec2(0.0f, 0.0f));
// 可选:进度条右侧添加文本说明
ImGui::SameLine();
ImGui::Text("%.0f%%", g_afk_progress * 100); // 转换为百分比显示

关键说明

  • ImGui::ProgressBar 的第一个参数必须是 0.0f ~ 1.0f 的值,因此用 当前进度 / 最大值 做归一化处理;
  • ImVec2(0.0f, 0.0f) 是进度条的尺寸,两个参数都为 \(0\) 时,进度条会自动填充当前窗口的宽度,高度使用默认值,更适配 UI;
  • 进度条的更新逻辑放在绘制之前,每帧累加少量数值,模拟 “时间流逝”,进度满时自动增加金币,实现简单的自动挂机效果;
  • %.0f%% 用于百分比显示,%% 表示输出一个%符号(转义字符),%.0f 不保留小数,更直观。

步骤 5:整合完整代码,编译运行验证效果

核心验证点

运行程序后,能看到清晰的金币、等级、每秒收益数值;
点击 “收取金币”,金币数值会立即增加,进度条重置;
金币≥100 时,点击 “升级建筑”,等级提升、每秒收益增加、金币扣除;
进度条会缓慢填充,满值后自动增加金币并重置,实现自动挂机;
中文正常显示,UI 排版整齐,无乱码、无报错。

后续小优化(可选,为下一阶段布局铺垫)

调整按钮尺寸:ImGui::Button("收取金币", ImVec2(120, 40)),第二个参数指定按钮的宽高,让按钮更美观;
给不足 100 金币时的升级按钮添加提示(比如红色文本),后续进阶交互阶段会详细讲解;
调整进度条颜色,ImGUI 默认样式即可,后续布局阶段可自定义样式。

基础组件阶段总结

核心是掌握 3 个组件的使用:Text(展示)、Button(交互)、ProgressBar(进度);
关键逻辑是:全局变量存储游戏状态,组件操作修改全局变量,帧循环实时刷新 UI;
这个阶段完成后,你已经拥有了挂机游戏的核心雏形,下一阶段就是优化 UI 布局,搭建双窗口(主面板 + 设置面板)。
恭喜你即将完成基础组件阶段,运行成功后,就可以顺利进入《UI 布局》阶段啦!

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

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

相关文章

【Linux】Docker容器中快速部署VNC远程桌面环境

Docker容器中快速部署VNC远程桌面环境 目录 环境说明快速部署详细步骤使用指南常见问题性能优化安全建议 环境说明 操作系统: Ubuntu 24.04 (Noble) 容器环境: Docker 桌面环境: XFCE4 VNC服务: TightVNC 显示分辨率: 1920x1080 色深: 24位真彩色快速部署 一键部署脚本 如…

面试 Java 基础八股文十问十答第十三期

面试 Java 基础八股文十问十答第十三期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;在一个静态方法内调用…

锡林郭勒盟英语雅思培训辅导机构推荐;2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

基于雅思官方考点数据、学员真实反馈及行业权威标准,本次针对锡林郭勒盟雅思培训市场开展全面深度测评,聚焦考生核心诉求,梳理出高性价比、靠谱实用的教育机构排行榜。雅思考试的听说读写四项考核各有侧重,多数考生…

Git空提交手动触发同步Vercel

git commit --allow-empty -m "Trigger Vercel deploy" git push origin main

乌海英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

基于2026年雅思考试趋势及乌海本地考生需求,本次通过权威数据调研、深度测评多家教育机构,结合学员真实反馈与教学实效,整理出这份靠谱的乌海雅思培训口碑排行榜。在雅思备考过程中,考生常面临选课迷茫、提分乏力、…

天津红桥东丽西青津南北辰英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

基于2026年雅思考试最新趋势及天津红桥、东丽、西青、津南、北辰区域考生核心需求,我们联合教育测评机构开展全面深度测评,结合数千名考生真实反馈与提分数据,打造这份权威靠谱的雅思培训辅导机构口碑排行榜。在雅思…

阿拉善盟英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

随着留学需求升温,雅思考试已成为学子出国深造的核心门槛,但备考过程中诸多痛点频发:优质教育机构良莠不齐,选课缺乏权威参考,提分技巧掌握不系统,个性化备考方案稀缺,性价比与提分效果难以兼顾。为帮助阿拉善盟…

天津红桥东丽西青津南北辰英语雅思培训辅导机构推荐;2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

据《2026年中国雅思培训行业发展白皮书》显示,天津红桥、东丽、西青、津南、北辰区域雅思考生逐年递增,其中45%为高中生、35%为本科生,剩余20%为在职人士及其他群体。但考生在雅思培训过程中普遍面临诸多痛点:选课…

2026年二手工业设备推荐榜:唐山市丰润区明科电源设备厂,二手电炉/冷却塔/变压器等全系供应 - 品牌推荐官

在工业设备更新迭代加速的背景下,二手工业设备市场正以年均15%的增速持续扩张。据行业数据显示,2025年国内二手工业设备交易规模已突破800亿元,其中二手电炉、冷却塔等热处理设备占比达32%。本文将聚焦唐山市丰润区…

全桥LLC开关电源,单片机TMS320F28034 硬件原理图,开环仿真模型,控制源代码

全桥LLC开关电源&#xff0c;单片机TMS320F28034 硬件原理图&#xff0c;开环仿真模型&#xff0c;控制源代码&#xff0c;主拓扑硬件计算最近在折腾一款全桥LLC开关电源&#xff0c;主控用了TI的TMS320F28034。这玩意儿真是把DSP和MCU的优势结合得挺到位&#xff0c;特别是做数…

天津滨海新区武清宝坻宁河静海蓟州英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

基于《2026年中国雅思培训行业发展白皮书》核心数据,结合滨海新区、武清、宝坻、宁河、静海、蓟州六大区域数千名雅思考生反馈,本次针对雅思培训领域开展全面深度测评,聚焦考生在选课、提分、高分突破等核心需求,从…

临汾市农村自建房设计找谁好?山西省临汾市自建房设计公司/机构深度评测口碑推荐榜。 - 苏木2025

一、引言:临汾农村自建房的“专业化转型” 临汾,这座地处晋南腹地、黄河东岸的城市,下辖尧都、曲沃、翼城等1区14县2市,域内地形多样,平川、丘陵、山地交错分布——汾河两岸的平川地带沃野千里,是传统农耕文明的…

十年深耕,成就行业标杆:昊客网络在阿里巴巴平台的王牌服务与客户实战案例 - 深圳昊客网络

深圳市昊客网络科技有限公司(简称:昊客网络)!公司成立于2016年,公司现有团队成员三十余人。团队项目经理、运营、技术人员,文案策划、商务团队经理均在行业内工作10年以上。昊客网络阿里巴巴店铺运营的核心是搭建…

YOLO26改进 - 卷积Conv | RefConv重新参数化重聚焦卷积:突破传统卷积瓶颈,有效减少通道冗余

前言 本文介绍了重新参数化再聚焦卷积&#xff08;RefConv&#xff09;在YOLO26中的结合应用。RefConv通过对预训练模型的基础卷积核应用可训练的再聚焦转换&#xff0c;建立参数间连接&#xff0c;利用预训练参数作为先验学习新表示&#xff0c;增强模型表示能力。它能减少通…

阿拉善盟英语雅思培训辅导机构推荐;2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

经权威机构深度测评与行业口碑调研,结合阿拉善盟考生实际备考需求,本文聚焦雅思培训核心痛点,为大家整理出2026年靠谱的雅思培训辅导机构排行榜。在雅思备考之路中,考生常面临选课迷茫、提分缓慢、技巧掌握不扎实、…

乌兰察布英语雅思培训辅导机构推荐;2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

雅思考试作为出国深造的核心语言门槛,其培训选课环节始终困扰着广大考生及家长。不少人在备考中面临提分乏力、技巧掌握不扎实、优质教育机构难甄别等问题,盲目选择不仅浪费时间金钱,更可能错失留学时机。为帮助大家…

天津和平河东河西南开河北英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

基于《2026中国雅思考试白皮书》权威数据,天津地区雅思考生逐年递增,核心需求集中于优质提分方案与靠谱教育机构。但在雅思培训选课过程中,考生及家长普遍面临诸多痛点:考试技巧碎片化、个性化提分路径缺失、机构口…

兴安盟英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

基于雅思考试备考需求与行业深度调研,本次结合机构资质、师资力量、提分效果、性价比、个性化方案等核心维度,对兴安盟及周边优质雅思培训教育机构开展全面权威测评,形成这份实用口碑排行榜。在雅思培训市场良莠不齐…

城口丰都垫江忠县云阳奉节英语雅思辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 老周说教育

随着城口、丰都、垫江、忠县、云阳、奉节六县留学需求的持续攀升,雅思成绩作为海外院校申请的核心语言凭证,成为众多学子留学路上的关键门槛。当前六县雅思教学资源呈现显著地域差异:垫江、奉节等县域核心商圈周边优…