Cocos2d-x上适合做工具的UI库:ImGui
Cocos2d-x的控件类型仅限于基础的几种,如label、button、listview等,做游戏开发时基本够用了。但如果想用cocos2dx来做工具的话,那就有点困难了。
这里介绍一个适合做工具的UI库:ImGui, 地址:https://github.com/ocornut/imgui。核心文件仅有UI逻辑部分,可接入OpenGL/DX/Cocos2d-x等多种渲染库。核心只有4个文件,也是够小的了。
GitHub上有一个Cocos2d-x lua版+ImGui的库:https://github.com/c0i/imguix。由于此库年久失修,在这儿上传一个ImGui1.6+Cocos2d-x3.16的可用工程。地址:https://pan.baidu.com/s/1IRNYw1PUPvoTIE1kV06Xkw, 效果如下图:
中文支持: 为ImGui指定一个中文字库
ImGuiIO& io = ImGui::GetIO(); io.Fonts->AddFontFromFileTTF("res/FZCuYuan-M03S.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesChinese());
渲染方式: 在cocos2dx中创建一个特殊的Layer,所有ImGui的内容显示在此Layer之上。由于Scene会在lua层指定,所以此处用了一个定时器来创建Layer
Director::getInstance()->getScheduler()->schedule([](float) { auto runningScene = Director::getInstance()->getRunningScene(); if (runningScene && !runningScene->getChildByName("ImGUILayer")) { runningScene->addChild(ImGuiLayer::create(), INT_MAX, "ImGUILayer"); } }, this, 0, false, "checkImGUI");
ImGui lua版用法简介:
在lua层创建一个imgui.draw函数,cocos2dx每帧渲染时都会来执行此函数,所有的imgui操作都需要在此函数内执行。所以如果在此函数内打印日志的话,将会惨不忍睹...
lua层目前导出了button、text、 popupModal、treeNodeEx等各种控件,更多可参见imgui_lua.cpp,imgui示例可参见imgui_demo.cpp。
部分控件方法需要成对出现,如imgui.begin/imgui.endToLua、imgui.treeNodeEx/imgui.treePop、imgui.beginChild/imgui.endChild等,否则将会报"Assertion failed: (g.CurrentWindowStack.Size == 1), function EndFrame"错误
在ImGui中,监听点击事件非常简单,判断函数的返回值即可:
if imgui.button("按钮") then print("点击按钮") end
在ImGui中,控件创建时不需要指定位置,系统会自动排列位置并对齐。当然也可以调用imgui.setCursorPos或imgui.setNextWindowPos来指定位置。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤