请问能否用cc.loader.load加载一个SpriteAtlas

因为希望限制android包的大小,所以希望把一部分的资源放到cdn下,用cc.loader.load({url:“https//aa.png”, type:“png”}) 这样加载
但是SpriteAtlas,不知道应该怎么加载,也每找到资料,请问开发组,该怎么解决

自己用texturepacker打包图集
使用loader先加载大图成为texture2d
再自己额外解析描述文件(atlas/plist等,根据打包格式)
然后构建spriteframe。如果你愿意,也可以再把这些frames放到一个spriteatlas里。

spriteframe的构造参数
let filename = arguments[0]; 这个传texture2d
let rect = arguments[1];
let rotated = arguments[2];
let offset = arguments[3];
let originalSize = arguments[4];

有文档的啊!
https://docs.cocos.com/creator/manual/zh/scripting/load-assets.html#加载图集中的-spriteframe

@kenshin 这个文档实现不了的,原文如下
2.这种加载方式只支持图片、声音、文本等原生资源类型,不支持 SpriteFrame、SpriteAtlas、Tilemap 等资源的直接加载和解析(需要后续版本中的 AssetBundle 支持)

看来要按照tonyzzp说的,有些麻烦啊

是说文档的代码段不能跑?还是跟你的需求不符合啊?文档的这个代码应该是可以跑的,你试试再说~

你可能没明白我的意思,我的SpriteAtlas是放在一个http服务器,希望能动态加载进来
你点开那个文档,看下面:加载远程资源和设备资源,
例子是这样的,
remoteUrl = “http://unknown.org/emoji?id=124982374”;
cc.loader.load({url: remoteUrl, type: ‘png’}, function () {
// Use texture to create sprite frame
});
他可以加载png,但是不能SpriteAtlas
你看下面文档中的一段话:
2.这种加载方式只支持图片、声音、文本等原生资源类型,不支持 SpriteFrame、SpriteAtlas、Tilemap 等资源的直接加载和解析(需要后续版本中的 AssetBundle 支持)
这是文档中的话,

但是我想到一个简单的方法。把spriteAtlas保留在项目里面。但是把图片改成1x1的png小文件。
然后在需要的时候,我使用
cc.loader.load({url: remoteUrl, type: ‘png’}, function () {
// Use texture to create sprite frame
});
这个接口来加载完成PNG,然后把那张1x1的替换掉。
现在就不知道如何替换缓存的的指定图片。请问该如何替换,我看cc.textureCatch这个东西是没法调用的,是个undefine

我在cc.loader中找到一个叫_cache的变量,能不能直接找到png,然后替换里面的_texture,会不会出什么问题啊

大概是这样处理的
var atlas = new cc.SpriteAtlas();
var spriteFrames = atlas._spriteFrames;
[‘run_0’, ‘run_1’, ‘run_2’, ‘jump_0’, ‘jump_1’, ‘jump2’].forEach(function (name) {
var frame = new cc.SpriteFrame();
frame.name = name;
spriteFrames[name] = frame;
});
var frame = atlas.getSpriteFrame(‘run_0’);

好的,谢谢

还是没看出来怎么把图片放进去的。。

大概知道了,拿到atlas原始的spriteFrames,然后给每个spriteFrame设置texture,这个texture是那个新图大texture。这样可行吧。