本来想子项目(开放数据域)想使用EUI来制作排行榜。
原5.1.11的时候是ok的。在5.2.2中,使用assetsmananger而不是res,则会报错wx.getFileSystemManager not function。
查找到这个报错是在egret.wxgame.js里
修改配置文件,将子项目的assetsmananger改成res,则这个报错消失。
但是即使使用res,也不能去加载default.res.json文件。
res仅仅能够让你能使用
let img:eui.Image = new eui.Image();
img.source = "resource/assets/bg.png";
如果使用assetsmananger,你连img.source = ""都会报错...
但是在主项目中使用assetsmanager则无问题。
那么我们可以在子项目中使用eui,仅仅加载皮肤主题,不加载default.res.json。
所以eui上的所有img的source,都要从主项目中以下面方式获取:
img.source = "resource/assets/xxx.png"
resource/assets/xxx.png是主项目的资源路径
加载皮肤主题后,则可以使用eui来制作排行榜RankPanel
class Main extends eui.UILayer { protected createChildren(): void { super.createChildren(); //inject the custom material parser //注入自定义的素材解析器 let assetAdapter = new AssetAdapter(); egret.registerImplementation("eui.IAssetAdapter", assetAdapter); egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter()); let theme = new eui.Theme("resource/default.thm.json", this.stage); theme.addEventListener(eui.UIEvent.COMPLETE, this.onThemeLoadComplete, this); } private onThemeLoadComplete(){ console.log("子项目加载皮肤完成"); this.addChild(new RankPanel()); } }
RankPanel的所有img图片路径都可以从主项目resource中获取
class RankPanel extends eui.Component{ public constructor() { super(); this.skinName = "RankPanelSkin"; } protected childrenCreated(){ let img:eui.Image = new eui.Image(); img.source = "resource/assets/login/ue2.png"; this.addChild(img); } }
补充:排行榜从开放域中获取图片
当在开放域eui中制作排行榜时,可以将排行榜所用素材正常的放在resource/assets下。
下图是开放域项目,排行榜测试用图片
发布后,这张图片是找不到的
因为发布后这张图片的路径是openDataContent/resource/assets/rankingtitle.png,而不是resource/assets/rankingtitle.png。
所以在开放域项目中需要重新设置这张图片的路径。(rankImg就是"排行榜"图片)
this.rankImg.source = "openDataContext/resource/assets/rankingtitle.png";
这样操作,可以方便的在开放域摆放排行榜UI,也能防止图片加载路径错误的问题。