关于循环加载贴图的问题

let tempNode : cc.Node = null;
for(let i;i < 5; ++i) {
    tempNode = cc.instantiate(this.onePrefab);
    cc.loader.loadRes("image", cc.SpriteFrame, function (err, spriteFrame) {
        tempNode .getComponent(cc.Sprite).spriteFrame = spriteFrame;
    });
    tempNode.setPosition(x,y);
    tempNode.parent = cc.find('Canvas');
}

第一个总是出现错误(不报错的那种,没贴图或者没挂载到根节点)。这种写法好像是有问题(异步的问题好像),以前有遇到过也解决了。现在又出现了,我却忘了是怎么解决的了,只好请问各位了。

for循环加上异步,必然导致闭包问题,也就是图片异步加载回来后总是最后一个tempNode

1赞

async test() {
let tempNode: cc.Node = null;
for (let i = 0; i < 5; ++i) {
tempNode = cc.instantiate(this.onePrefab);
let func = () => {
return new Promise(resolve => {
cc.loader.loadRes(“HelloWorld”, cc.SpriteFrame, function (err, spriteFrame) {
tempNode.getComponent(cc.Sprite).spriteFrame = spriteFrame;
resolve();
});
});
}
await func();
tempNode.setPosition(tempNode.width * i, 0);
this.node.addChild(tempNode);
}
}

2赞

谢谢你能够回答我

谢谢各位的解答,明白了

mark mark