继续创造,加快生长!这是我参加「日新计划 10 月更文应战」的第3天,点击查看活动概况

遇到的问题

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

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

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

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

Cocos2d-x Editor Build WIth Qt/Web

问题剖析

开发editor运用的framework

如今开发桌面运用首选Electron,运用web前端技能栈开发桌面运用,开发功率杠杠的,只管梭就行了,并且有VsCode、CocosCreator等老练产品得到了印证,可是由于Cocos2dx选用C++编写,没有合适的方法和Electron融合,修正源码的代价有点hold不住,所以这个计划也被我否定了。

Cocos2d-x Editor Build WIth Qt/Web

选用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,绕了一圈,脑壳痛!

Cocos2d-x Editor Build WIth Qt/Web

所以,我在想有啥更优的解决计划么?

数据通讯解决计划

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

中心工位发生了一次改变,也便是这次改变,让我得到了这个问题的一个解决计划:

Cocos2d-x Editor Build WIth Qt/Web

由于间隔公司的书柜更近了,一抬头就能看到里边都有什么技能书本,刚好看到一本网易出的书本,想着大厂出的书肯定牛逼,感觉仍是有必要刷一刷,尽管我根本很少看技能书本。

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

Cocos2d-x Editor Build WIth Qt/Web

Cocos2d-x Editor Build WIth Qt/Web

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

Cocos2d-x Editor Build WIth Qt/Web

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

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

总结一下现在的编辑器计划

Cocos2d-x Editor Build WIth Qt/Web

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

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

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

你或许要说功能问题,确实存在,可是关于我现在的状况,这个不是重点,这套技能架构完全能支撑一段时间。

选用web编写GUI应该已经是时下流行的解决计划,香馥馥!

我便是经过写Cocos Creator插件入坑web前端的。

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

Cocos2d-x Editor Build WIth Qt/Web

总的来说,最近半年仍是收成满满。