使用resources.load动态加载精灵 总是报错

  • Creator 版本: 3.4.1

  • 目标平台:Chrome

  • 编辑器操作系统: win 11

  • 本人做前端开发的 , 最近兴起 , 想学学游戏 , 所以是新入坑的 !

文件列表:

微信截图_20220513144141

问题描述:

  1. 新建一个空的精灵
  2. 将ts代码绑定到该组件
  3. 动态加载精灵并绑定到spriteFrame
    然后报错了:
Error: Bundle resources doesn't contain test_img/land
    at _loop (url-transformer.ts:110:35)
    at parse (url-transformer.ts:44:44)
    at Pipeline.sync (pipeline.ts:219:28)
    at preprocess (preprocess.ts:73:55)
    at Pipeline._flow (pipeline.ts:262:9)
    at Pipeline.async (pipeline.ts:257:14)
    at AssetManager.loadAny (asset-manager.ts:455:18)
    at Bundle.load (bundle.ts:240:31)
    at test.start (test.ts:28:19)
    at component-scheduler.ts:266:22
  • 我的代码:
 start () {
        // [3]
        resources.load("test_img/land",SpriteFrame,(err,res:SpriteFrame)=>{
            console.log(err,res);
            
            this.getComponent(Sprite).spriteFrame = res
        })
    }

然后我把类型换成了:ImageAsset类型 可以加载 ,但是是Image数据, 可我要精灵啊
我又试了下resources.loadDir 也能加载目录中的数据 , 返回的是一个数组
我想,可能就只是SpriteFrame不能加载 , 换一种类型试试: 我将图片用TexturePicker制作为图集 , 然后, 用SpriteAtlas的方式加载
代码如下:

start () {
        //  这里sprite是生成的图集
        resources.load("test_img/sprite",SpriteAtlas,(err,res)=>{
            this.getComponent(Sprite).spriteFrame = res.getSpriteFrame("land")
        })
    }

这种方式也能加载

最后我想问的是:

为啥直接使用resources.load("**/**",SpriteFrame,callback)的形式会报错?

你好,现在 Creator 3.x 上加载项目资源中的 SpriteFrame 应该这样传入路径:

resources.load("test_img/land/spriteFrame",SpriteFrame,(err,res:SpriteFrame)=>{
            console.log(err,res);
            
            this.getComponent(Sprite).spriteFrame = res
        })

因为实际上 land 是 imageAsset,所以没法使用 SpriteFrame 类型加载它。
类似的资源:
图片

好的 , 谢谢

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。