如何修改白鹭引擎的Res或者其他扩展库?
白鹭Egret引擎,最坏的一点是,它是开源项目,最好的一点是,它开源项目。
修改引擎源码的原因,有非常多,其中最重要的是,你可以第一时间获得bug的修复或者新功能。
那么,要怎么修改引擎代码呢?
1. 首先,你得有代码。
安装完白鹭egret以后,你就已经有egret的源码了,虽然不是全部。
官方的引擎代码库实际上可以分为3个部分:
- 引擎核心代码
- 引擎内部扩展库
- 引擎外部扩展库
1.1.引擎核心代码及内部扩展库
在命令行输入:egret info,可以得到当前使用的引擎版本和代码位置:
这个目录里其实包含了两部分引擎代码:
其中
1 为核心代码
2 为内部扩展库,比如eui, res等
1.2. 外部扩展库
而引擎外部扩展库,比如粒子系统,物理系统等,则在另外一个工程: egret-game-library。
2. 然后,有代码以后就可以自己修改了。
怎么修改,具体要看每个项目遇到的不同情况来处理。
原则是:
尽量不要改动已有的接口,多采用增加新接口的方式来修改引擎。
3. 最后,修改完代码,你还需要进行打包编译,并引回自己的项目。
针对引擎的不同部分代码,我们来一个个分解。
3.1. 编译引擎核心代码
修改引擎的核心代码后,在任意地方使用egret make命令就可以编译egret的核心代码了。
egret make --egretversion 5.1.9
您正在使用白鹭编译器 5.1.9 版本
编译完后,需要使用以下命令,把修改后的引擎代码引回自己的项目。
egret clean
3.2. 编译引擎内置扩展库
需要特别注意的是,
虽然引擎的内部扩展库和引擎的核心代码在同一个项目里,但是,如果你需要改动引擎的内部扩展库,比如想把res的某个私有变量暴露出来,或者增加一个新的方法,只修改代码,然后执行egret make是不会自动编译的。
原因没什么好追究的,反正是白鹭引擎的一些设定。
那么,要怎么做呢?
简单说,你需要像打包第三方库一样去做
参考:官方的第三方库文档:http://edn.egret.com/cn/article/index/id/172)
除了源码外,你还需要三件东西:
1). *.d.ts 库描述文件
2). tsconfig.json 编译配置文件
3). package.json (拿5.1.9测试时,并没有发现这个文件的必要性)
值得一提的是:
如果你以为这是官方的内部扩展库,我们不需要关心配置文件,只需要改代码,重新编译就完成了,那你就太天真了。
我本来以为官方的代码库应该是完整的,拿来就能用的,然而,实际上并不是。
以最常用的Res库为例:
https://github.com/egret-labs/egret-core/tree/master/src/extension/resource
你会发现,既没有*.d.ts,也没有tsconfig.json,更没有package.json
好吧,那我们一个个来处理。
1). tsconfig.json
首先,还好别的地方有tsconfig.json可以参考,比如eui,或者assetsmanager,拿过来改巴改巴:
{
"compilerOptions": {
"target": "es5",
"outFile": "../../../build/res2/res2.js",
"declaration": true,
"noImplicitAny": false,
"stripInternal": true,
"allowUnreachableCode": true,
"experimentalDecorators": true,
"strictNullChecks": true,
"sourceMap": false,
"lib": [
"es5",
"dom",
"es2015.promise"
]
},
"include": [
"**/**.ts",
"*.ts",
"../../../build/egret/egret.d.ts",
"../../../build/game/game.d.ts"
]
}
这个配置文件,将打包一个我们自己的res库,名字叫res2
*2). .d.ts
至于*.d.ts,可以用egret自带的那个res.d.ts,改成 res2.d.ts
这个文件必须跟库名相同,否则无法自动引用回项目目录,不要问什么
保存到/build/res2/res2.d.ts
3). package.json
这个文件似乎用不到。
万事俱备,就等编译。
1). 然后到res库的目录, /src/extension/resource,执行命令
egret build
你会看到很多错误,不过没关系。
眨眼之间,我们需要的js文件已经编译好了:
/build/res2
2). 现在,到项目目录下,修改 egretProperties.json,把res改为res2
3). 编译游戏工程
执行
egret -e build
即可引入新的res库并编译
3. 编译引擎外部扩展库
参考官方的第三方库文档:http://edn.egret.com/cn/article/index/id/172
github上引擎的外部扩展库都是完整的,直接参考官方文档照做就好了。
最后
白鹭团队做了很多事情,但是中国的环境下,生存压力巨大,他们毕竟不是神,没法面面俱到,有些事情我们能做的就自己做吧。