Egret社区
本帖最后由 白鹭终结者 于 2018-12-19 20:53 编辑

在用位图加载的时候遇到了一些坑,在这里写一下(引擎版本为5.2.12)。
加载位图有三种常见情况
1、纹理集及其config都在本地
      这种情况符合官方教程,不再赘述
2、纹理集及其config都在远程服务器
      loadConfig ( url :string, resourceRoot :string ):
      前一项为文件地址,后一项为根目录地址,加载时会自动加载地址在 resourceRoot+url 下的config,再通过这个config加载文件。config即为default.res.json, 加载config下的文件时会通过resourceRoot+config.url加载。
3、纹理集在远程,config在本地
      这种情况在比如用了公共图床下的图片时会用到,为了解决这种不同位置资源的问题,提出以下方法      不改变RES.loadConfig的加载地址(本地),直接修改某种文件的加载地址。
      loadConfig会调用libs\modules\assetsmanager下的资源加载函数,这个函数来自于引擎下build\assetsmanager下的文件,这个文件由引擎下 src\extension\assetsmanager\src\processor\Processor.ts编译而成。loadConfig会先通过Processor底部的函数判断加载类型,再调用相关函数。
       QQ截图20181219202616.png
      可以看到sheet为纹理集图片,它会调用SheetProcessor这个函数,为了单独设定它的加载地址,修改源码为
       QQ截图20181219203107.png

      直接删除root地址,修改本地纹理集的配置文件的file为远程地址,比如从“abc.jpg”改为"https://aaa/bbb/ccc/abc.jpg" 这样纹理集图片的加载地址就变为了 "https://aaa/bbb/ccc/abc.jpg"  + "", 就是远程地址。这种方法可以修改纹理集的加载地址而不影响本地配置文件的加载。
      这种方法直接修改源码,也可以单独拎出来这段函数重载。
      加载完后要重新编译引擎,注意是编译引擎,(egret make),之后会在更新引擎目录下的build文件,从而使用
egret引擎的问题
      正常来说,编译项目的时候,会重新编译lib下的文件,这个文件就来自于引擎的build文件,应当是从build文件直接复制。这个build文件是引擎编译的ts转的js文件
      但是,egret引擎有些许问题:
      1、修改源码并egret make后只有build\egret下的文件才更新,build\assetsmanager下的不被更新。这个问题没法解决,应该是egret的一些问题。所以直接修改build下assetsmanager.js函数,像上文修改process一样。同时需要混压assetsmanager.js为assetsmanager.min.js,使用Uglifyjs这个库进行压缩。assetsmanager.d.ts并不需要修改。
      2、即使修改之后,编译项目时,发现项目文件下lib库并没有被更新,说明没有从build拷贝,原因不明。解决方法是复制引擎所有文件(包括build)到新的地方,修改引擎位置,再次编译项目就好了,怀疑是框架刷新的问题。
       QQ截图20181219204812.png

进过以上步骤就可以完成加载不同位置的文件的功能。之后使用纹理集在本地加载并无不同。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部