求教大神指点cc.loader.loadRes的用法

代码如下:

    for (var i = 0; i < rewardArr.length; i++) {
        var prefab = cc.instantiate(this.rewardPrefab);
        var rewardInfo = rewardArr[i];

        var item = prefab.getChildByName('item');
        var num = prefab.getChildByName('num');
        if(rewardInfo['type']==1) {
            var itemInfo = dataApi.props.findById(rewardInfo['item_id']);
            var icon = itemInfo['icon'].split('.');
            num.getComponent(cc.Label).string = rewardInfo['num'];
            cc.loader.loadRes('props/' + icon[0], cc.SpriteFrame, function (err, spriteFrame) {
                if (err) {
                    cc.error(err.message || err);
                    return;
                }
                var sprite = item.getComponent(cc.Sprite);
                sprite.spriteFrame = spriteFrame;
            });

        }
        this.reward_node.addChild(prefab);
    }

发现只有最后一个能显示图片,这是为啥啊

cc.loader.loadRes 不能在循环里使用吗?

那么问题来了 如何给动态创建的多个Prefab里面的sprite显示图片呢?

救命啊 大神 如何写呢

你的回调方法有一个闭包,闭包用到了外部循环里的变量 item。这个 item 连同闭包本身是整个循环共用一份的。
正确的做法是声明 let item 而不是 var item。这样就能每次循环创建一个独立的闭包啦。

谢谢!:heart_eyes: 搞定了

刚查了下资料,https://msdn.microsoft.com/zh-cn/library/dn263046(v=vs.94).aspx
let的要求:
在以下文档模式中不受支持:Quirks、Internet Explorer 6 标准模式、Internet Explorer 7 标准模式、Internet Explorer 8 标准模式、Internet Explorer 9 标准模式和 Internet Explorer 10 标准模式。 在 Windows 8 中不受支持。

如果用了let,是不是Quirks,ie6-10都跑不起来?

Creator 会完美把 let 编译为 ES5 标准下的语法