Cocos Creator 加载远程资源和设备资源
在目前的 Cocos Creator 中,我们支持加载远程贴图资源,这对于加载用户头像等需要向服务器请求的贴图很友好,需要注意的是,这需要开发者直接调用 cc.assetManager.loadRemote
方法。同时,如果开发者用其他方式下载了资源到本地设备存储中,也需要用同样的 API 来加载,上文中的 cc.resources.load
等 API 只适用于应用包内的资源和热更新的本地资源。下面是这个 API 的用法:
// 远程 url 带图片后缀名 var remoteUrl = "http://unknown.org/someres.png"; cc.assetManager.loadRemote(remoteUrl, function (err, texture) { // Use texture to create sprite frame }); // 远程 url 不带图片后缀名,此时必须指定远程图片文件的类型 remoteUrl = "http://unknown.org/emoji?id=124982374"; cc.assetManager.loadRemote(remoteUrl, {ext: '.png'}, function () { // Use texture to create sprite frame }); // 用绝对路径加载设备存储内的资源,比如相册 var absolutePath = "/dara/data/some/path/to/image.png" cc.assetManager.loadRemote(absolutePath, function () { // Use texture to create sprite frame }); // 远程音频 remoteUrl = "http://unknown.org/sound.mp3"; cc.assetManager.loadRemote(remoteUrl, function (err, audioClip) { // play audio clip }); // 远程文本 remoteUrl = "http://unknown.org/skill.txt"; cc.assetManager.loadRemote(remoteUrl, function (err, textAsset) { // use string to do something });
目前的此类手动资源加载还有一些限制,对开发者影响比较大的是:
- 这种加载方式只支持图片、声音、文本等原生资源类型,不支持 SpriteFrame、SpriteAtlas、Tilemap 等资源的直接加载和解析。(如需远程加载所有资源,可使用 Asset Bundle)
- Web 端的远程加载受到浏览器的 CORS 跨域策略限制,如果对方服务器禁止跨域访问,那么会加载失败,而且由于 WebGL 安全策略的限制,即便对方服务器允许 http 请求成功之后也无法渲染。
目前尚未确认的问题是:
1、能否加载远程js资源
2、跨域的问题如何更好的解决