cocos creator如何同步加载资源?

比如,动态加载tiledmap后读取出来地图的相关信息,然后其他一些节点的组件会在update中用到这些信息,就导致在资源未加载完成时,需要资源信息的其他组件的update会出现问题。
所以,是否有能同步加载资源的接口?如果没有的话,该如何解决上述的问题?
非常感谢!

希望引擎团队的前辈们指点一下呀,谢啦~
同步加载这个事另一个同学也在说,应该是不少人都有的问题,即使没有同步接口,能不能有什么可行的办法解决问题呀,再次感谢~

大家都求异步加载,你怎么要求同步加载

比如加载关卡地图,会读出来地图长宽等信息,然后角色节点的组件会用到这些长宽信息,请问如何协调这个顺序?希望角色的一些组件在地图加载完再执行,
谢谢!

在update里面自己控制 如果某个组件想要获取的值为空就直接return

在回调中执行啊 不就是同步了

你在加载完后回调不就可以了啊

这样update里每次都要判断,然而其实资源加载1次就行,前几ms内就完成了,在加载后update依然每次都判断,觉得这样浪费性能,有点丑的感觉。。。说白了就是希望能有个同步。。。看来是没办法了,就用比较丑的办法做吧。

回调地狱不说,有些觉得不适合写在1个组件里,想分开,所以就有了同步的需求,,说到底,有个LoadResSync就好了。。。

就像描述的场景,比如我每一关,载入tiledmap资源,读出来很多地图信息,然后其他player,camera节点的组件都需要这些信息,如在他们的update里要用长宽等,但是前几个ms内update执行时,tiledmap还没载入。当然可以像楼下同学说的,加个判断,但是就是觉得有点丑。。。只有前几ms有效,别的时间这些判断都在浪费cpu。。。

可以在update里控制,如果有资源在加载就不走逻辑

你好这个问题解决了,我遇到类似的问题,而且我的问题比较麻烦的是要加载一万个节点的图片资源,如何能在全部加载完成后再调用其他函数呢。假如节点数量少,那我可以放在update里去判断,但是假如像我这种情况,数量那么多,我怎么能监听到全部加载完呢?用什么能检测到是否有资源在加载呢

@snow168rain

你可以使用 Promise ,像这样

async init() {
    let data = await this.loadResSync("background/bg_1");
    console.log("AAA", data)
}

loadResSync(url) {
    return new Promise((reovle, reject) => {
        cc.loader.loadRes(url, (err, res) => {
            if (err) {
                reject(err);
            }
            else {
                reovle(res);
            }
        });
    });
}

xiexie,我试试

js,提示await是保留字段,不能用啊。

想要同步,就是直接引用啊。

await 编译不过怎么破

你不好把update删除了, 等用的时候再赋值update.