最近研究接触了下ImGui, 发现这货结合Cocos2d-x系列引擎写游戏工具非常方便,据笔者分析,有如下优点:

  • 不会污染游戏逻辑
  • 复用游戏场景功能
  • 无需美术提供工具资源,自动布局的菜单按钮,程序员轻松搞定
  • 非常丰富的控件,可以写出非常易用的游戏工具,提高工具使用者体验和效率
  • C++可用宏来控制,避免release游戏将GM工具发布出去了

于是笔者产生了将ImGui集成到axmol引擎中的想法,本着复用原则,笔者先在github搜索一番,按stars数量排序(搜索优秀开源库的基本方法),点击查看搜索结果,按照常规,自然先使用了 c0iimguix: https://github.com/c0i/imguix,但这个最是基于3.17.1的,而axmol是基于cocos2d-x-4.0发展而来,因此经过简单修改,笔者使其支持了axmol,并给作者提了PR: https://github.com/c0i/imguix/pull/32

如果到此为止,也就是简单集成而已,但经过多番查看github相关issues,发现imguix不支持mutli-view-ports,与此同时也通过github了解到imgui官方仓库的docking分支,是支持mutli-viewports的,也就是说ImGui的窗口可以拖出游戏窗口之外,因此笔者找到了这个仓库: https://github.com/Xrysnow/cocos2d-x-imgui,通过简单了解发现,这个貌似也是基于imguix优化的版本,在imguix的基础上基于imgui官方仓库的docking分支,同时master分支主要支持cocos2d-x-4.0,于是笔者经过简单的修改,成功将该版本集成为axmol的扩展,同时做了如下重点优化:

  • Mac平台Mutli-Viewports拖动时导致游戏界面黑屏,因此禁用(tips: 跑了imgui官方的示例,也无法拖出主窗口之外)
  • 整理扩展管理单利类,重命名为: ImGuiPresenter
  • 修正概念ImGuiLayer其实仅仅做事件跟踪监测,并无实际渲染功能,因此重构为ImGuiEventTracker并隐藏到扩展本身,不暴露给外部
  • 重构为ImGuiPresenter的addRenderLoop/removeRenderLoop接口来管理ImGui的渲染循环
  • 提供非常简单易用的字体管理接口addFont,removeFont,clearFonts
  • 优化ImGui的beginFrame, endFrame时机,使用者可以在addRenderLoop的渲染循环里处理ImGui的控件逻辑来直接安全地添加或删除游戏场景里的对象,有效避免迭代器被破坏
  • 优化ImGuiPresenter单利的生命周期管理,准确清理和初始化ImGui Context,避免destroyInstance后,再次ImGuiPresenter::getInstacne使用时奔溃
  • DPI缩放支持 API: ImGuiPresenter::getInstance()->scaleAllByDPI(1.0);
  • 在扩展内部自己计算需要赋值给ImGui::GetIO()的deltaTime,以避免暂停``Director```后,ImGui报错
  • 其他代码优化

Tips: 这里有个小点,就是之前版本axmol或者cocos系列引擎,在Director暂停后会将帧率限制特别低,导致ImGui作为游戏内嵌工具的窗口拖动特别慢,笔者认为完全没必要,因此笔者加了宏来控制,详见:https://github.com/axmolengine/axmol/commit/2d5fb7f77d671b3bb0f7ee5a4ded0e4fca2b8178

有了以上优化,axmol的ImGuiPresenter才真正达到易用和稳定性的程度,用法如下:

#include "ImGui/ImGuiPresenter.h"
USING_NS_AX;
USING_NS_AX_EXT;class GameScene : public Scene {public:void onEnter() override{Scene::onEnter();ImGuiPresenter::getInstance()->addRenderLoop("#im01", CC_CALLBACK_0(GameScene::onImGuiDraw, this), this);}void onExit() override{ImGuiPresenter::getInstance()->removeRenderLoop("#im01");Scene::onExit();}void onImGuiDraw(){ImGui::Begin("window");ImGui::Text("FPS=%.1f", 1.f / ImGui::GetIO().DeltaTime);ImGui::End();}
}

另外axmol同时也写了test case,可以直接按照编译步骤跑ImGui的使用用例,效果如下

怎么样,是不是非常简单,赶紧下载体验吧

  • https://github.com/axmolengine/axmol/tree/master/extensions/ImGui
  • https://github.com/ocornut/imgui

非常感谢github的前辈们提供的cocos2dx imgui实现版本:

  • https://github.com/c0i/imguix
  • https://github.com/Xrysnow/cocos2d-x-imgui

ImGui 集成到 axmol 引擎相关推荐

  1. thymeleaf依赖_玩转SpringBoot集成 Thymeleaf 模版引擎

    随着互联网技术的发展,在前后端分离开发模式已经逐渐成为主流的今天,前后端技术的划分也越来越清晰,社会分工进一步细化,职业岗位也更加细分,慢慢开始就有了前端攻城狮和后端攻城狮,技术也进一步细分,出现了以 ...

  2. <12>springboot集成thymeleaf模板引擎

    创建一个springboot工程,导入以下依赖 <dependencies><!--springboot框架web组件依赖--><dependency><gr ...

  3. java beetl模板引擎_Spring Boot集成beetl模板引擎 个人总结

    1. Spring boot快速集成beetl模板引擎 查看官方文档:http://ibeetl.com/guide/#beetl 可参看官方文档 4.6. Spring Boot集成 增加beetl ...

  4. 九、SpringBoot集成Thymeleaf模板引擎

    Thymeleaf咋读!??? 呵呵,是不是一脸懵逼...哥用我的大学四级英文知识告诉你吧:[θaimlif]. 啥玩意?不会音标?...那你就这样叫它吧:"赛母李府",大部分中国 ...

  5. Spring Boot集成Thymeleaf模板引擎

    一.Thymeleaf 模板介绍 Spring Boot 推荐使用Thymeleaf 来代替传统开发中的JSP,那么什么是Thymeleaf 模板引擎呢?下面就来简单的介绍一下. Thymeleaf ...

  6. 2分钟 Docker 部署 SprinBoot 集成 Flowable 工作流引擎

    文章目录 一. 简介 二. docker流程引擎部署 2.1. jdk安装配置 2.2. 下载打包好的tar包 2.3. 上传tar包 2.4. 在线安装Docker 2.5. 检验安装是否成功 三. ...

  7. js文件中怎么使用thymeleaf标签_007、Spring Boot集成Thymeleaf模板引擎

    1. Thymeleaf 介绍 Thymeleaf 是适用于 Web 和独立环境的现代服务器端 Java 模板引擎. Thymeleaf 的主要目标是为您的开发工作流程带来优雅的自然模板 - 可以在浏 ...

  8. Spring Boot 集成SnakerFlow流程引擎,简介、功能列表、详细解读、扩展点分析

    文章目录 简介 功能列表 流程定义 任务参与者 参与者设置 动态添加.删除参与者 组支持 详细解读 Spring Boot集成 表定义 表详细说明: 字段详细说明: 常见操作 常规API 综合查询 模 ...

  9. 增强axmol引擎视频播放之 - windows视频播放支持

    一.开发缘由 cocos2dx全系列不支持windows视频播放,给开发和测试带来不便 虚幻和unity都采用将视频渲染到纹理的方式,极大提升了视频和引擎渲染对象的融合,而cocos2dx全系列不支持 ...

最新文章

  1. Excel 计算除法并显示为万分之几,如0.15‱
  2. 给力开源,.Net开源地址大收集
  3. 如何判断两物体加速度相等_高中物理:速度和加速度知识点
  4. VM之Linux:Linux的Ubuntu中,解决安装后屏幕太小的问题
  5. 【译】A look at MobileIron’s zero sign-on and passwordless authentication plans
  6. 计算机端口介绍[详细列表]
  7. jquery排他思想
  8. 20172325 2018-2019-1 蓝墨云班课实验--哈夫曼树的编码
  9. 【题解】Luogu P5294 [HNOI2019]序列
  10. Hibernate 学习的书-夏昕(2)
  11. wpsa3版面怎么变成a4、排版不变_wpsa4变a3排版打印
  12. Python初级项目之随机漫步的Matplotlib实现
  13. 小企业怎样选择服务器和操作系统
  14. SSM项目实例——简易版图书管理系统
  15. 【hadoop生态之ZooKeeper】第三章ZooKeeper内部管理【笔记+代码】
  16. python开发的项目管理软件_10 个超好用的免费开源项目管理软件
  17. 论文投稿指南——中文核心期刊推荐(科学、科学研究)
  18. 【数据结构】一元多项式
  19. osgEarth使用笔记4——加载矢量数据
  20. 物联网云平台应用于水产养殖

热门文章

  1. Matplotlib使用Latex中文
  2. 用ESP8266实现 手机控制车库门开关
  3. 正式版上线、登录币安NFT市场,PlatoFarm近况
  4. 无线洗地机哪款性价比高?高性价比的洗地机分享
  5. 学画画,这些美术集标记好的学习重点拿去用
  6. javascript--经典实例锦集
  7. 基础-02-日语中为何会有体言用言?
  8. mybatis mysql concat_在MyBatis中使用concat()方法
  9. 最全iOS 应用上架流程(提交到AppStore)
  10. php 每天的凌晨三点,无论几点睡,凌晨3.4点总会醒?4个原因,得懂得先排除