在目前的 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、跨域的問題如何更好的解決