loadRes加载地图后,如何赋值给一个全局变量

我已经知道使用
loadRes加载地图资源
loadTilemap(){
cc.loader.loadRes(url, cc.TiledMapAsset, function(err, tmxAsset) {
if (err) {
cc.error(err.message);
return;
}
tiledMap.tmxAsset = tmxAsset;

       //这样做正确,可以获取对象组
       tiledmap.getObjectGroups() 
});

}

otherFunction(){
//这个就是错误的,获取对象组为空
tiledmap.getObjectGroups();

}

我知道因为有加载延迟,所以只能在loadRes里才可以调用。但是我想在其他函数中直接调用。应该使用什么方法??这个问题困扰好久。请帮忙解答一下!

这个看起来是局部变量

是这样。我是已经创建了一个空的tiledMap组件,tmxAsset为空
然后组件文件里property设置了属性
properties: {
mapNode: {
type: cc.Node,
default: null,
},

最后在loadRes里使用也是this.mapNode.getComponet(cc.Tiledmap).tmxAsset=tmxAsset
请帮我解答一下是哪里出了问题。谢谢

这个好像是JavaScript的特性吧,this指的不是你的class,而是你的loadRes这个function,你可以在loadRes外面先把this复制,比如self = this;然后就可以用self .mapNode.getComponet(cc.Tiledmap).tmxAsset=tmxAsset试试,应该可以的,
我也是新手,希望对你有帮助,以前写C++的,

找到了一个解决方案,不过太麻烦了。发现loadRes是延迟加载的。我只有在方法中使用schedule()延时1秒执行才能够取到TiledMap的属性。不知道还有有其他方法可以使用。

这个是异步的,你不是写了回调函数吗,在那里处理不就好了吗

所以您的意思是

我这些方法都放在loadRes的回调里?不用单独提出来,放在onLoad()里?

可以全部放在loadRes里面执行,如果嫌代码难看,可以在loadRes里加载完资源后发送一个消息,在消息响应里再处理其他操作就可以了。

谢谢!!