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有兴趣的同学能有所帮助
704 0
|
21天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
1月前
|
Web App开发 前端开发 开发工具
介绍Web开发的基础知识
介绍Web开发的基础知识
29 7
|
1月前
|
存储 资源调度 应用服务中间件
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
26 0
|
1月前
|
存储 前端开发 JavaScript
从前端到后端,探索现代Web开发技术
本文探索了现代Web开发技术的各个方面,包括前端和后端开发以及多种编程语言的应用。通过对JavaScript、Java、Python、C、PHP和Go等语言的介绍,深入探讨了前端和后端开发的基本原理和常用工具。同时,还涵盖了数据库技术在Web开发中的重要性和应用场景。无论你是初学者还是有经验的开发者,本文都能为你提供全面的视角和实用的知识,帮助你在Web开发领域取得更好的成果。
|
1月前
|
缓存 关系型数据库 API
后端开发:构建高效、可扩展的Web应用程序的关键
后端开发:构建高效、可扩展的Web应用程序的关键
21 0
|
6天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
15 0
|
6天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
9天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
10天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。

推荐镜像

更多