Cocos2d-x Editor Build WIth Qt/Web

简介: Cocos2d-x Editor Build WIth Qt/Web

遇到的问题

最近一直在围绕cocos2dx进行相关开发,项目中最近刚好出现一个界面显示异常的问题,但是这部分的代码我并不是非常的熟悉,而且代码量有点大。

其实我是很排斥从头review这部分代码的,毕竟需要看明白原有逻辑,然后再不停的debug才能真正定位到问题。

经验告诉我,一般这种问题,大概率是position、scale、visible、size、opacity等属性导致的,通过检查这些属性,基本就能把问题定位到,如果这些属性没问题,这问题就比较棘手了。

为了快速排查定位到问题,我认为项目需要类似inspector这样的辅助工具,而且我也有至少2款inspector的开发经历,所以我决定开发一个inspector

网络异常,图片无法展示
|

问题分析

开发editor使用的framework

如今开发桌面应用首选Electron,使用web前端技术栈开发桌面应用,开发效率杠杠的,只管梭就行了,并且有VsCode、CocosCreator等成熟产品得到了印证,但是因为Cocos2dx采用C++编写,没有合适的办法和Electron融合,修改源码的代价有点hold不住,所以这个方案也被我否定了。

网络异常,图片无法展示
|

采用C++开发桌面应用,可选的解决方案也不是太多,cocos studio选择的是mono,开发语言使用c#,我不太熟悉,也不太擅长,所以,直接否定了这个方案。

本着尽量少使用不同语言就能达成目的,所以可选项也就锁定在MFC、QT。

这两个方案网上都有教程,感觉MFC(没饭吃)已经是非常老的技术了,而且在跨平台方面,QT综合来看是个不错的选择。

最后还是决定使用QT,将cocos2dx嵌入还是有一定难度,好在网上查查资料,都顺利解决了。

这里我并没有使用Qt Creator进行开发,而是使用了Qt Visual Studio Tools,主要原因是目前并没有发布Mac的需求,对Visual Studio也比较熟悉,配置起来更加得心应手。

编写编辑器的各种面板

将引擎嵌入到Qt之后,就需要开发编辑器相关的功能啦,这也是编辑器工作的工作重心之一,工作量不容小觑。

使用Qt提供的GUI控件肯定不行,开发效率跟不上,而且很多复合组件还需要自己手动撸,后期一定痛苦的不要不要的。

虽然Qt也推出了QML开发方式,但是和传统的web开发相比,还是有点另类,况且我也不想学很多杂七杂八的零碎技术栈,使用的技术越杂,维护的成本也就越高,但是我还是希望解决方案能够满足尽可能多的需求,矛盾又不矛盾。

后来我想到了Qt有webview控件,我可以编写一个web页面,然后放到webview控件里面,这样子就能和Qt整合在一起,不过web页面就不能像Electron那样使用nodejs的特性啦,有舍必有得嘛!

说干就干,别说,最终的效果还是挺让我满意的,感觉这个方向没错。

编辑器的数据通讯

这就稍微有点麻烦了,引擎是c++,编辑器面板是js,中间的桥梁是webview,虽然Qt也提供了通过QChanel进行通讯,但是后来发现其实并不是太好用。

首先我必须在web页面引入QChanel.js,里面包含了一些Qt的全局变量,导致我在使用vue开发打包的时候需要额外的处理。

其次,项目里面有使用lua,lua层要和js进行通讯,QChanel的方案非常的麻烦,web页面通过QChanel访问到Qt,到达C++层后,通过Lua binding逆向访问Lua,绕了一圈,脑壳痛!

网络异常,图片无法展示
|

所以,我在想有啥更优的解决方案么?

数据通讯解决方案

当我还在Cocos工作的时候,也做过这方面的探索,方案也是Qt,同样也是卡在这里,网上各种搜资料,当然是大海捞针,一无所获。

中间工位发生了一次变化,也就是这次变化,让我得到了这个问题的一个解决方案:

网络异常,图片无法展示
|

因为距离公司的书柜更近了,一抬头就能看到里面都有什么技术书籍,刚好看到一本网易出的书籍,想着大厂出的书肯定牛逼,感觉还是有必要刷一刷,虽然我基本很少看技术书籍。

本着随便翻一翻的态度,不曾想竟然在里面得到了答案,里面有一章节专门介绍网易内部的游戏编辑器架构,他们的梦幻西游编辑器是用Python Qt,引擎是c++,只要是2种不同的语言,肯定要牵扯通讯问题,书中写到为了保证足够的通用性和灵活性,通讯这块他们使用了Socket!

网络异常,图片无法展示
|

网络异常,图片无法展示
|

很久之前我写的一个inspector插件就这么干过,在我完成 cc-inspector for chrome版本的开发后,我当时认为chrome插件的调试场景覆盖不到非H5环境,所以后来就开发了这个cc-inspector+

网络异常,图片无法展示
|

当时我还以为这种方法有点业余,怕被耻笑,现在看来,竟然和网易大佬们的想法不谋而合,这种被认同的感觉,让我瞬间对这个方案充满了信心。

说干就干,现在就是验证这个想法的绝好机会,经过几天的摸索,成功把整个通讯流程跑通了,这种通过网络进行隔离的方案,让我在开发web页面的时候,完全可以在浏览器中完成页面的编写,几乎和开发正常的网页没有区别,HMR(hot module replacement)简直爽的不要不要,开发效率和开发体验直接起飞。

总结一下目前的编辑器方案

网络异常,图片无法展示
|

使用Qt开发编辑器,将引擎嵌入进去,然后各种编辑器面板就运行在QWebview中。

把这个QWebview放到QDockWidget中,就可以实现面板的各种浮动停靠,就像unity那种丝滑。

引擎和面板之间通过网络进行交互,即使以后更换引擎,我只需要对接网络接口就可以啦,更换引擎C++就很好对接啦,HTML5引擎,同样使用QWebview包起来就行啦。

你可能要说性能问题,的确存在,但是对于我目前的情况,这个不是重点,这套技术架构完全能支撑一段时间。

采用web编写GUI应该已经是时下流行的解决方案,香喷喷!

我就是通过写Cocos Creator插件入坑web前端的。

不过目前也有部分不太舒服的地方,就是不能使用nodejs,不过总体来说我已经很满意了,开发出来的编辑器公司的同事反馈良好,在一定程度上对项目的起到了实质性便利。

网络异常,图片无法展示
|

总的来说,最近半年还是收获满满。



目录
相关文章
|
Web App开发 Windows
Build Web Apps in Node and Express视频下载
上传到百度云了,点击这里下载>>    作者使用的是Mac系统,不过Windows也差不多,主要理解express一些基本配置和使用,讲的比较基础,希望对node.js、express有兴趣的同学能有所帮助
725 0
|
JavaScript 前端开发 C++
Qt Features for Hybrid Web/Native Application Development-转载
White Paper Today's computer users live and work in an interconnected world. They always have a network at hand and expect their data to be available at all times wherever they are.
880 0
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
166 3
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
179 45
|
19天前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
26天前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
28 7
|
1月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
29天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
37 2
|
1月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
53 1
|
1月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。