[LayaAirIDE 2.0]QQ小游戏demo跑不起来 MiniFileMgr.fs.readFile无回调

1、环境: Laya2.2.0、Laya2.3.0、Laya2.4.0
2、下载qq小游戏开发工具最新版 我是0.1.28
3、LayaIDE新建2D模板工程
4、编译发布到qq小游戏
5、qq小游戏开发工具 运行该项目
 
问题:
1、Main.ts的 Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION); 该行能成功运行,执行了this.onVersionLoaded回调;
2、然后该行Laya.AtlasInfoManager.enable("fileconfig.json", Laya.Handler.create(this, this.onConfigLoaded)); 运行后,不执行 this.onConfigLoaded回调。
3、qq小游戏开发工具断点跟踪到laya.qqmini.js,发现MiniFileMgr的readFile(...)函数中,MiniFileMgr.fs.readFile无任何回调反应。没有success回调、没有fail回调、没有complete回调。
即第2次调用MiniFileMgr.fs.readFile无回调。
 
验证:
1、自己写循环用MiniFileMgr.fs.readFile来循环读多个文件测试,发现是可以加载多个文件且有回调的
let files = ["version.json", "version2.json", "fileconfig.json"];
    for(var i = 0; i < files.length; i++) {
        let fileUrl = files;
        console.log("加载文件测试", i, fileUrl);
        MiniFileMgr.readFile(fileUrl, "utf8", Laya.Handler.create(this, function() {
            console.log("加载文件测试1", i, fileUrl);
        }));
2、Laya.loader.load() 循环多个文件加载测试,均只能加载第一个文件,后续无回调。
3、MiniFileMgr.fs.readFilesync 同步可以读到文件。
4、Main.ts中 交换几个配置文件,均是第一个配置能加载到,后面的都不行,排除跟文件的关系。
 
 
求解?Demo都运行不下去了。
 
问题更新(以下在QQ小游戏开发工具上运行):
1、代码1:(均加载成功)
let files = ["fileconfig.json", "version.json", "version2.json"];
for(var i = 0; i < files.length; i++) {
    Laya.loader.load(files);
}
2、代码2:(只加载成功了files[0])
Laya.loader.load(files[0], Laya.Handler.create(this, function() {
       Laya.loader.load(files[1], Laya.Handler.create(this, function() {
               // 这里无回调
               Laya.loader.load(files[2], Laya.Handler.create(this, function() {

                }));
        }));
}));
但chrome、IDE上运行正常。qq工具不行。
求救
 
已邀请:

156*****180

赞同来自:

 
自己找到一个现象以及临时解决方案:
>>现象:
微信开发工具 laya.wxmini.js中:
let a = window.wx.getFileSystemManager();
let b = window.wx.getFileSystemManager();
console.log("对象是否相等", a == b); 
打印  true!!!

QQ开发工具laya.qqmini.js中:
let a = window.qq.getFileSystemManager();
let b = window.qq.getFileSystemManager();
console.log("是否相等", a == b); 
打印 false!!!
 
>>临时解决方案:
qq中每次都尝试使用不同的FileSystemManager可以让游戏跑起来,但不知道是有有其他问题,比如内存、线程等。
1、把Laya.qqmini.js 中的
MiniFileMgr.fs = window.qq.getFileSystemManager()
改成MiniFileMgr.fs = function() {
    return window.qq.getFileSystemManager();
}
2、所有用到MiniFileMgr.fs.*的地方都改成MiniFileMgr.fs().*
 
 
另:QQ小游戏还有个bug !
laya.core.js中的window.qqMiniGame(Laya, Laya)会执行两次! 导致Laya.qqmini.js 里边流程走两遍了。
解决:
把laya.core.js中的
if (u.indexOf('OPPO') == -1 && u.indexOf("MiniGame") > -1 && "wx" in Browser.window) {
                // if ("qq" in Browser.window) {
                //     window.qqMiniGame(Laya, Laya);
                //     if (!Laya["QQMiniAdapter"]) {
                //         console.error("请引入手机QQ小游戏的适配库:https://ldc2.layabox.com/doc/?nav=zh-ts-5-0-0";);
                //     }
                //     else {
                //         Laya["QQMiniAdapter"].enable();
                //     }
                // }
                // else {
                    window.wxMiniGame(Laya, Laya);
                    if (!Laya["MiniAdpter"]) {
                        console.error("请先添加小游戏适配库,详细教程:https://ldc2.layabox.com/doc/?nav=zh-ts-5-0-0";);
                    }
                    else {
                        Laya["MiniAdpter"].enable();
                    }
               // }
            }
如上注释掉。保留一个即可
 
 
跑起来了!
 

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作