ImGui 集成到 axmol 引擎
最近研究接触了下ImGui, 发现这货结合Cocos2d-x系列引擎写游戏工具非常方便,据笔者分析,有如下优点:
- 不会污染游戏逻辑
- 复用游戏场景功能
- 无需美术提供工具资源,自动布局的菜单按钮,程序员轻松搞定
- 非常丰富的控件,可以写出非常易用的游戏工具,提高工具使用者体验和效率
- C++可用宏来控制,避免release游戏将GM工具发布出去了
于是笔者产生了将ImGui集成到axmol引擎中的想法,本着复用原则,笔者先在github搜索一番,按stars数量排序(搜索优秀开源库的基本方法),点击查看搜索结果,按照常规,自然先使用了 c0i
的imguix
: 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 引擎相关推荐
- thymeleaf依赖_玩转SpringBoot集成 Thymeleaf 模版引擎
随着互联网技术的发展,在前后端分离开发模式已经逐渐成为主流的今天,前后端技术的划分也越来越清晰,社会分工进一步细化,职业岗位也更加细分,慢慢开始就有了前端攻城狮和后端攻城狮,技术也进一步细分,出现了以 ...
- <12>springboot集成thymeleaf模板引擎
创建一个springboot工程,导入以下依赖 <dependencies><!--springboot框架web组件依赖--><dependency><gr ...
- java beetl模板引擎_Spring Boot集成beetl模板引擎 个人总结
1. Spring boot快速集成beetl模板引擎 查看官方文档:http://ibeetl.com/guide/#beetl 可参看官方文档 4.6. Spring Boot集成 增加beetl ...
- 九、SpringBoot集成Thymeleaf模板引擎
Thymeleaf咋读!??? 呵呵,是不是一脸懵逼...哥用我的大学四级英文知识告诉你吧:[θaimlif]. 啥玩意?不会音标?...那你就这样叫它吧:"赛母李府",大部分中国 ...
- Spring Boot集成Thymeleaf模板引擎
一.Thymeleaf 模板介绍 Spring Boot 推荐使用Thymeleaf 来代替传统开发中的JSP,那么什么是Thymeleaf 模板引擎呢?下面就来简单的介绍一下. Thymeleaf ...
- 2分钟 Docker 部署 SprinBoot 集成 Flowable 工作流引擎
文章目录 一. 简介 二. docker流程引擎部署 2.1. jdk安装配置 2.2. 下载打包好的tar包 2.3. 上传tar包 2.4. 在线安装Docker 2.5. 检验安装是否成功 三. ...
- js文件中怎么使用thymeleaf标签_007、Spring Boot集成Thymeleaf模板引擎
1. Thymeleaf 介绍 Thymeleaf 是适用于 Web 和独立环境的现代服务器端 Java 模板引擎. Thymeleaf 的主要目标是为您的开发工作流程带来优雅的自然模板 - 可以在浏 ...
- Spring Boot 集成SnakerFlow流程引擎,简介、功能列表、详细解读、扩展点分析
文章目录 简介 功能列表 流程定义 任务参与者 参与者设置 动态添加.删除参与者 组支持 详细解读 Spring Boot集成 表定义 表详细说明: 字段详细说明: 常见操作 常规API 综合查询 模 ...
- 增强axmol引擎视频播放之 - windows视频播放支持
一.开发缘由 cocos2dx全系列不支持windows视频播放,给开发和测试带来不便 虚幻和unity都采用将视频渲染到纹理的方式,极大提升了视频和引擎渲染对象的融合,而cocos2dx全系列不支持 ...
最新文章
- Excel 计算除法并显示为万分之几,如0.15‱
- 给力开源,.Net开源地址大收集
- 如何判断两物体加速度相等_高中物理:速度和加速度知识点
- VM之Linux:Linux的Ubuntu中,解决安装后屏幕太小的问题
- 【译】A look at MobileIron’s zero sign-on and passwordless authentication plans
- 计算机端口介绍[详细列表]
- jquery排他思想
- 20172325 2018-2019-1 蓝墨云班课实验--哈夫曼树的编码
- 【题解】Luogu P5294 [HNOI2019]序列
- Hibernate 学习的书-夏昕(2)
- wpsa3版面怎么变成a4、排版不变_wpsa4变a3排版打印
- Python初级项目之随机漫步的Matplotlib实现
- 小企业怎样选择服务器和操作系统
- SSM项目实例——简易版图书管理系统
- 【hadoop生态之ZooKeeper】第三章ZooKeeper内部管理【笔记+代码】
- python开发的项目管理软件_10 个超好用的免费开源项目管理软件
- 论文投稿指南——中文核心期刊推荐(科学、科学研究)
- 【数据结构】一元多项式
- osgEarth使用笔记4——加载矢量数据
- 物联网云平台应用于水产养殖