游戏引擎从零开始(12)-docking&多窗口

做一个好看的窗口

imGui有个docking分支,支持docking和多窗口功能。本节只有几行代码修改,读者可以直接参考commit修改,不逐行解释了.

docking

docking功能指的是拖动窗口,四边会出现一组响应区域,鼠标拖动子窗口到对应热区,会对齐到该边上。

多窗口

多窗口指的是整个应用可以有多个独立的窗口,即子窗口可以从主窗口中拖出去.

docking&多窗口实现

切换分支

docking和多窗口需要特定的imGui分支,进入Sandbox/Hazel/vendor/imgui目录,切花到docking分支

复制代码
git checkout docking

如果你不能科学上网,可以手动下载imGui的 docking分支代码

修改imGui初始化的代码

c++ 复制代码
void ImGuiLayer::OnAttach() {
    IMGUI_CHECKVERSION();
    ImGui::CreateContext();
    ImGui::StyleColorsDark();
    ImGuiIO& io = ImGui::GetIO(); (void)io;


    io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;
    io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;

    io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking
    io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;

最重要的就是这两行,打开docking和viewports

c++ 复制代码
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;

上一节中的代码实现的有点问题ImGuiIO& io = ImGui::GetIO(); io变量的声明少了个&,效果就不对,c++语言真是容易出错。
如果第一次运行出来的效果有问题,考虑删除项目运行目录下的"imgui.ini 文件",该文件会实时记录程序的数据

打开dockspace

程序运行起来,从examples中打开Dockspace,使docking和多窗口生效

本节对应的代码还做了多处调整,使整体结构更为合理。读者可参考commit对比。

完整代码参考 docking&viewports

相关推荐
青少儿编程课堂1 小时前
蓝桥杯青少组 + 全国青少年信息素养大赛 + 电子学会图形化考级|校园推箱子大挑战解析
c++·python·算法·bfs·信息学竞赛
ZzT1 小时前
vibe coding 做小游戏·开工篇:5 天、8400 行代码一行没手写,先让 AI 能检查自己
ai编程·游戏开发·claude
Huanzhi_Lin2 小时前
资源回收源码阅读参考-上
游戏开发·gc·laya·layaair·资源回收·laya3.4
多弗朗皮卡丘2 小时前
C++STL之空间配置器
开发语言·c++·内存池·空间配置器
牵猫散步的鱼儿2 小时前
Demosaic 和 Remosaic
c++
CodeYp20192 小时前
第19讲:封装红黑树实现 mymap 和 myset
开发语言·c++·红黑树
SmalBox2 小时前
06-04-源码-加密解密服务
unity3d·游戏开发
孙鹏宇.3 小时前
C++类型转换
c++
超级架构师3 小时前
让 COBOL 长出 AI 大脑:原生 Agent 核心框架 praxo-core 深度剖析
c语言·开发语言·c++·人工智能·python·架构·ai编程
UWA3 小时前
告别「好像还行」:制作人别再靠感觉做线上质量决策|GPM 小Q MCP 实战
性能优化·游戏开发·gpm