egret-pro编辑器分析

简介: egret-pro编辑器分析

egeret已经倒闭了,想看下egret-pro编辑器,现在只能通过第三方的备份进行下载了。

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

相关环境的版本信息:

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

场景窗口是一个单独的窗口

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

在编辑器安装目录发现了熟悉的目录结构

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

开发过electron应用的话,肯定对resources目录非常熟悉,还好egret-pro并没有对编辑器代码加密,仅仅是通过webpack进行了压缩混淆,顺着package.json一路就能找到入口

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

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

resources/app/out/main/Main.js中找到打开项目创建BrowserWindow的地方,加上打开devtools的逻辑

this.projectWindow = new electron_1.BrowserWindow(windowOption);
this.projectWindow.webContents.openDevTools();
复制代码

这样打开项目后,就能看到编辑器的devtool

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

随后发现,这个场景窗口是无法拾取到,那么这个场景窗口是怎么回事呢?

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

先将其他窗口都关闭,只剩场景窗口:

网络异常,图片无法展示
|
尝试将div依次都 display:none,发现当场景窗口消失不见的时候,我们会看到

网络异常,图片无法展示
|
这就更加说明这个场景窗口是一个window,覆盖在egret-pro上

网络异常,图片无法展示
|
通过Spy++并没有得到我们想要的答案,看来又只能看源码了

突破口

var electron=require("electron")
var rect={x:0,y:0,width:100,height:100};
electron.ipcRenderer.send("scenepanel:resize", rect);
复制代码
electron_1.ipcMain.addListener("scenepanel:resize", function (evt) {
    var args = [];
    for (var _i = 1; _i < arguments.length; _i++) {
        args[_i - 1] = arguments[_i];
    }
    var rect = args[0];
    console.log(`x:${rect.x}, y:${rect.y}, width:${rect.width}, height:${rect.height}`);
    var view = _this.projectWindow.getBrowserView();
    if (view !== null && rect) {
        view.setBounds(rect);
    }
});
复制代码

发现尝试着移动到窗口外边,还是无法突破主窗口的限制,应该还不是一个window,仍旧是一个dom,但是为啥找不到这个dom呢?

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

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

一个实验性的api:调整大小并且移动view到相对于window的指定区域。

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

electron_1.ipcMain.addListener("scene:createbrowserview", function (evt) {
    var args = [];
    for (var _i = 1; _i < arguments.length; _i++) {
        args[_i - 1] = arguments[_i];
    }
    // BrowserView加载的url 
    var baseUrl = "http://localhost:3000/editor.html?player-mode=4&content-width=2048&content-height=1024&";
    var url = baseUrl + "projectPath=" + args[0] + "&projectTmpPath=" + args[1] + "&rootPath=" + args[2] + "&userPath=" + args[3];
    var options = {
        webPreferences: { preload: path.join(args[2], "./out/runtime/runtime.js") }
    };
    if (_this.runtimeView) {
        _this.runtimeView.webContents.closeDevTools();
        // TODO:destory会导致crash bug
        //ref:https://github.com/electron/electron/issues/19921#event-2776839618;
        //ref:https://github.com/electron/electron/issues/21410
        // this.runtimeView.destroy();
        // this.runtimeView = null;
    }
    //如果每次都使用同一个browserview,刷新编辑器渲染进程主进程会出现uncaughterror.
    //如果每次都创建一个新的browserview且不destory,会导致browserview无法回收,同时rpc重复发送多次reconnect消息,进一步导致编辑器无法正常通讯。
    //如果每次都创建一个新的browserview且destory,上条问题解决,但编辑器resize的时候会crash.
    //升级electron至v8.1.1,依然未修正这些问题,目前采用方式1.
    if (!_this.runtimeView) {
        _this.runtimeView = new electron_1.BrowserView(options);
    }
    var rect = args[4];
    if (rect) {
        _this.runtimeView.setBounds(rect);
    }
    // 最终BrowserVIew还是需要加载一个URL
    _this.runtimeView.webContents.loadURL(url);
    UserSetting_1.UserSetting.openDevtools && _this.runtimeView.webContents.openDevTools({ mode: "detach" });
    _this.projectWindow.setBrowserView(_this.runtimeView);
});
复制代码

很显然这个是一个BrowserView,我们用浏览器打开后可以看到真正的面貌

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

感觉是为了做engine环境的隔离,cocos creator是将canvas内嵌在iframe里面了

可能会遇到无法打开的问题

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

http://tool.egret-labs.org/EgretPro/engine/proupdate.json?v=0.29059651250877794

网络异常,图片无法展示
|
可以改下host

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



目录
相关文章
|
4月前
|
前端开发 JavaScript Java
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
|
移动开发 图形学 UED
市场上已知的AVG编辑器调查分析
市场上已知的AVG编辑器调查分析
495 0
|
JSON Android开发 数据格式
Flutter从0到1实现高性能、多功能的富文本编辑器(模块分析篇)
经过前面两篇文章的基础知识铺垫,我们终于要进入到专栏的核心内容 — 富文本。富文本编辑器可以说是APP中最复杂,但使用场景又极广的组件之一。例如各大笔记APP的核心功能、闲鱼的商品发布功能、还
Flutter从0到1实现高性能、多功能的富文本编辑器(模块分析篇)
|
JavaScript
多种 网页文本编辑器 分析
文本编辑器应用总结 一. lhgeditor文本编辑器 lhgeditor组件文件结构: 1. lhgeditor.js: 组件的核心JS文件 2. lhgeditor.css:组件的样式表文件 3. images:组件所需的图片都在此文件夹中 以上三个文件为组件所必须的三个文件,组件包中其它以“_”开头的文件为示例的演示文件,实际使用中不需要这些文件。
1158 0
|
6月前
|
存储 Linux 编译器
vim编辑器和gcc/g++编辑器的使用讲解
vim编辑器和gcc/g++编辑器的使用讲解
152 2
|
4月前
|
开发工具
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
|
5月前
|
开发工具
Vim 编辑器:高效文本编辑的瑞士军刀
**Vim 概览:** Vim 是一个功能丰富的文本编辑器,以其高度可定制性著称。文章介绍了 Vim 的高效使用技巧,包括快捷打开文件、命令行模式下的常用命令、查找与替换、删除和复制文本。还讨论了配置 `.vimrc` 文件以自定义设置,如改变 leader 键、设置缩进和高亮,并展示了安装插件如 vim-airline 和 vim-snazzy 的方法。通过这些技巧,用户能提升 Vim 使用效率。
66 5
|
5月前
|
Ubuntu 搜索推荐 Linux
Linux的Vim编辑器详解
Linux的Vim编辑器详解
|
4月前
|
Linux 开发工具 数据安全/隐私保护
【linux】如何优雅的使用vim编辑器
【linux】如何优雅的使用vim编辑器