知道一个cc.loader
但不知道如何写文件
另外,如果从服务器请求一个图片进行展示,该如何进行呢?
盼复,谢谢!
知道一个cc.loader
但不知道如何写文件
另外,如果从服务器请求一个图片进行展示,该如何进行呢?
盼复,谢谢!
好像可以通过cc.assetsManager来更新资源到本地
关于文件读写,只知道cc.loader来读
读写该如何弄?
加载一个URL图片又该如何弄呢?
文件的读取和使用,你直接引用具体的文件链接就可以了,不跨域的话,都很简单。加入资源列表,引擎会发起文件请求,然后你直接引用就可以了。
你如果要读写,具体的需求是啥?
感谢回复
因为APP中,有个要求是动态加载服务器上的图片,比如用户头像。
我是新手,所以只知道从本地图片文件加载精灵,因此以为需要把用户头像放到本地,再进行展示。
但这样,同步用户头像的方式似乎也不好。
所以,我想知道,如何将服务器上的图片(URL),展示在场景中
谢谢
1楼的兄弟已经回复你了呀,如果是你APP所对应的自己的缓存服务器集群里的图片,那一般都不是跨域的,你直接引用图片地址就行了。要是跨域了,好像就得去把文件拿到本地再加载了。
谢谢回复。
我测试时,在网页上是可以的,但是编译成原生app,比如cocos compile -p android
图片加载不了
能否进一步提供一下我这方面的思路?
最后仍然使用了assetsmanager解决了问题
谢谢大家相助
楼主好,最后你加载服务器图片具体是如何实现的,2.2.3版本可以吗?
谢谢啦!
我用的是cocos2d-js 3.0 beta
Step 1: 准备需要同步的在线资源
这里准备三个东西
第一个东西:http://127.0.0.1:3000/res/,里面放置需要同步的资源,比如:http://127.0.0.1:3000/res/update.log
第二个东西:http://127.0.0.1:3000/res/project.manifest,里面放置同步的详细信息
第三个东西:http://127.0.0.1:3000/res/version.manifest,里面放置同步的版本信息
project.manifest文件内容:
{
"packageUrl" : "http://127.0.0.1:3000/res",
"remoteManifestUrl" : "http://127.0.0.1:3000/res/project.manifest",
"remoteVersionUrl" : "http://127.0.0.1:3000/res/version.manifest",
"version" : "1.0.0",
"groupVersions" : {
"1" : "1.0.1"
},
"engineVersion" : "3.0 beta",
"assets" : {
"update" : {
"path" : "update.log",
"md5" : "a529eb05b181477c2b0aa7fc3f9d3967",
"group" : "1"
}
},
"searchPaths" :
]
}
version.manifest文件内容:
{
"packageUrl" : "http://127.0.0.1:3000/res",
"remoteManifestUrl" : "http://127.0.0.1:3000/res/project.manifest",
"remoteVersionUrl" : "http://127.0.0.1:3000/res/version.manifest",
"version" : "1.0.0",
"groupVersions" : {
"1" : "1.0.1"
},
"engineVersion" : "3.0 beta"
}
Step 2: 项目中建立同步文件
路径:res/project.manifest,内容如下:
{
"packageUrl" : "http://127.0.0.1:3000/res",
"remoteManifestUrl" : "http://127.0.0.1:3000/res/project.manifest",
"remoteVersionUrl" : "http://127.0.0.1:3000/res/version.manifest",
"version" : "1.0.0",
"groupVersions" : {
"1" : "1.0.0"
},
"engineVersion" : "3.0 beta",
"searchPaths" :
]
}
注意groupVersions里面的版本号,比Step 1中的要低
Step 3: 在resource.js里面添加配置,方便程序中调用
路径:src/resource.js,文件内容:
var res = {
...
Project_manifest : "res/project.manifest"
...
};
Step 4: 编写同步代码
路径:src/AssetsManager.js,文件内容:
var AssetsManagerLoaderScene = cc.Scene.extend({
_am:null, //同步管理器
_progress:null, //一个LabelTTF,显示同步进度
_percent:0, //同步百分比
run:function(){
var layer = new cc.Layer();
this.addChild(layer);
this._progress = new cc.LabelTTF.create("0%", "Arial", 12);
this._progress.x = cc.winSize.width / 2;
this._progress.y = cc.winSize.height / 2 + 50;
layer.addChild(this._progress);
// 获取存储路径,我在MAC下测试时,结果是在~/目录里
//如果放手机上测试,应该在手机存储卡里(待测试)
var storagePath = (cc.fileUtils ? cc.fileUtils.getWritablePath() : "/");
//如果是浏览器访问的,直接跳过更新
//因为如果是Web方式访问,资源可以直接用URL进行创建
//比如:cc.Sprite.create("http://127.0.0.1:3000/res/abc.jpg");
if(cc.sys.browserType){
cc.director.runScene(new NextScene());
return;
}
//创建同步管理器,其中res.Project_manifest就是上面resource.js中设置的路径
//storagePath就是上面获取的存储路径,资源将会自动同步到这个目录
this._am = new cc.AssetsManager(res.Project_manifest, storagePath);
this._am.retain();
//下面这一堆代码,就是同步过程,通过事件监听方式,作对应的操作
if (!this._am.getLocalManifest().isLoaded())
{
cc.log("Fail to update assets, step skipped.");
cc.director.runScene(new NextScene());
}
else
{
var that = this;
var listener = new cc.EventListenerAssetsManager(this._am, function(event) {
var scene;
switch (event.getEventCode()){
case cc.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
cc.log("No local manifest file found, skip assets update.");
cc.director.runScene(new NextScene());
break;
case cc.EventAssetsManager.UPDATE_PROGRESSION:
that._percent = event.getPercent();
break;
case cc.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST:
case cc.EventAssetsManager.ERROR_PARSE_MANIFEST:
cc.log("Fail to download manifest file, update skipped.");
cc.director.runScene(new NextScene());
break;
case cc.EventAssetsManager.ALREADY_UP_TO_DATE:
case cc.EventAssetsManager.UPDATE_FINISHED:
cc.log("Update finished.");
cc.director.runScene(new NextScene());
break;
case cc.EventAssetsManager.ERROR_UPDATING:
cc.log("Asset update error: " + event.getAssetId() + ", " + event.getMessage());
cc.director.runScene(new NextScene());
break;
default:
break;
}
});
cc.eventManager.addListener(listener, 1);
this._am.update(); //开始同步
cc.director.runScene(this);
}
this.schedule(this.updateProgress, 0.5);
},
updateProgress:function(dt){
this._progress.string = "" + this._percent;
},
onExit:function(){
cc.log("AssetsManager::onExit");
this._am.release();
this._super();
}
});
谢谢楼主,
我看到你写的浏览器访问跳过?真的吗?
我2.2.3用cc.Sprite是无法直接加载图片链接的,不管有没有跨域
本域试过了,应该是没问题的,比如我调试时的地址是:
http://127.0.0.1:63342/MyDemo/index.html
我有张图片是:res/CloseNormal.png
访问地址是:

代码中是:
var sp = cc.Sprite.create(“http://127.0.0.1:63342/MyDemo/res/CloseNormal.png”);
this.addChild(sp);
测试是可以显示的。
如果跨域的话,Web服务器设置一下header的Access-Control-Allow-Origin,我想应该也是可以的,不过没测试过
神奇!!
竟然今天同一域名下就成功了
还是谢谢楼主,之后遇到跨域问题再试着你的方法!
我刚测试了一下跨域,也是没有问题的。
我在我的node.js中加入了一个跨域设置:
app.use(function(req, res, next){
res.header(“Access-Control-Allow-Origin”, “*”);
return next();
});
然后用:cc.Sprite(“http://外域地址/res/image.png”);
是可以正常创建的
谢谢楼主耐心解答!万分感谢! :855:
还是遇到跨域的问题
我本域的JSON传递了跨域的图片链接,图片还是无法显示出来啊
这样设置似乎不起作用的啊?!用的是PHP
你好, 我也想问问js的文件读取与保存,
比如我的cocos2d-js android平台 通过
cc.loader.loadImage(URL, function ( res, texture) {
得到texture,
把玩家的默认头像ImageView换成这个texture之后
如何把这个texture存到本地文件里面?
});
还有, 如何存储其他的明文到本地文件?
— Begin quote from ____
引用第2楼seanlin于2014-06-18 00:09发表的 :
文件的读取和使用,你直接引用具体的文件链接就可以了,不跨域的话,都很简单。加入资源列表,引擎会发起文件请求,然后你直接引用就可以了。
你如果要读写,具体的需求是啥? http://www.cocoachina.com/bbs/job.php?action=topost&tid=207112&pid=981096
— End quote
那跨域要怎么办呢,前提是不能修改跨域配置文件。
怎么放到本地的cache中的
cocos 2d-js 实现对文件的移动删除操作