ccc3.0的SpriteAtlas.getSpriteFrame有bug

拖一个图集进来,绑定变量SpriteAtlas,直接用getSpriteFrame(“xxx”)为空,xxx是存在的key

继而打印一下:
spriteFrames是:{"": SpriteFrame} =>详细=>SpriteFrame {_objFlags: 0, _name: “xxx”…}
_name难道不应该是key?这个图集的sf的key是空.

唉,好醉,我把图集里的图增加到2个,现在好了,spriteFrames只有最后一个,这API还能正常用吗…

3.0是不是2D不推荐使用的,要不退回2.4算了…

哥们搞定了么, 我也使用这个方法, 用getSpriteFrame后无法获取, 以前用U3D经常这么用~~~>_<

同问,动态加载的SpriteAtlas只获取到了图集的最后一张怎么回事?还没修复吗?

我也遇到一模一样的问题了,我用的atlas里面的碎图能够在编辑器里正常拖进sprite控件和显示,通过resources.load()却只能得到一个不包含任何spriteframe的atlas,居然是一年多的问题了也没人管啊,佛了


使用的引擎版本是哪个?用 3.6.3 测试正常,还是说是预览情况下加载的自动图集

我也是3.6.3,不是自动图集,是texture packer预先生成的,加载代码就是用的官方例子里的(当然路径和名称相应修改过了)

resources.load("test_assets/sheep", SpriteAtlas, (err, atlas) => {
    const frame = atlas.getSpriteFrame('sheep_down_0');
    sprite.spriteFrame = frame;
});

打断点可以看到atlas里面只有一个{"": SpriteFrame},我实测了下用""确实能取到合图里面的最后一个碎图,但是这个碎图真正的名字就没了,而且大图里其他所有碎图也全都没了
QQ截图20230116193457

这个症状极大概率是引擎内部在做碎图名称映射的时候莫名其妙把碎图名字全都搞成了空字符串,因此引发名字冲突,因此只有最后一个碎图活下来了。
这种问题居然可以一年多不修,害怕

测试资源发我测下?

好的,已发私信

有结果吗?

他的 plist 文件里散图的 key 读取有点问题,修改下就好,你那边有问题的文件方便发我测下看看?

请你不要污蔑我,有问题的是你们引擎自动生成的.meta,我发你的.plist没有问题

麻烦看下私信回你的,不知道你们使用什么软件生成的文件,确实存在兼容问题,修改下文件里的内容就能使用,没有什么污蔑的意思。

谢谢回复. 我之前没弄明白怎么读取自动图集的图, 后来翻看了之前论坛的有人回复, 自动图集的图不用管, 就按正常图片使用即可, 打包时会自动处理. 初次使用cc做项目, 还没空验证. 这块文档写的不直白. 提个建议: 写cc引擎文档的人, 写一两个小游戏并再使用几个其他游戏引擎学习重复实践一下, 再来写文档, 思路上会更贴近用户.

你好,同样遇到这个问题
Cocoscreator 3.7.2
TexturePacker 7.0.2

导出图集格式为 cocos2d-x

一样代码动态加载获取的图集key有问题
请问如何解决

我去,21年的问题被你们挖坟了…而且我已经完全忘记这个问题到底是什么回事了 :sweat_smile:

+1 3.7.2也有这个问题

我来挖坟 3.4版本中图集资源加载问题 这个贴有正确答案,就是将plist里面的图片名字加上后缀,`W1}2JKCX6VZ~@$@WR(O%{5