cocos2d-js 3.12 大家是如何读取数据资源的,比如JSON格式的数据资源,希望大牛不吝赐教!
cc.loader.loadJson 是异步的,这样处理起来不是很理想,或者大家有什么好的方案,可以传授一下吗?
这么久都没有人回答 ???
同是小白帮顶
那你就游戏开始或者进入场景前用loadJson加载了再进入游戏、场景。接下来就同步使用了。
进入场景了加载了,可是怎么同步使用呀?我想存到一个全局变量里,不会搞了。。。
下面接口都是直接查cpp代码的,js不一定能用.
首先需要获取到文件内容
var content = cc.fileUtils.getStringFromFile(‘mayuyu.json’)
fileUtils在native的时候好像叫做jsb, 具体的不记得了
然后将json转为object
var obj = JSON.stringify(content);
首先谢谢回复!
cc.fileUtils 是原生平台才有的API,但是在web引擎中已经被删除了
var FortInfo = [];
MyStructMgr.initFortInfo = function ()
{
cc.loader.loadJson( resJSON.FortJson ,function(err,data){
if( err )
{
console.log(“JSON-ERR:” +err );
}
else
{
for( var i in data )
{
var Info = {};
Info.nType = data[i].index;
Info.nScore = data[i].fortscore;
Info.needdiamond = data[i].needdiamond;
Info.framename = data[i].framename;
FortInfo.push( Info );
}
}
});
};
给你一套思路吧,这种加载一般需要在一个专门的资源加载场景里做
// 全局的静态数据, static data
sd = sd || {}
var LoadingScene = cc.Scene.extend({
_progress: undefined, // 加载进度(最大100代表加载完毕)
_JSON_PROGRESS: 20, // json占的加载进度
_OTHERS_PROGRESS: 80, // 可能还需要加载其他的资源, 例如图片, 音乐
ctor: function(){
this._progress = 0
}
onEnter: function(){
cc.loader.loadJson("res/sdMonster.json", function(err, sdMonster){
if (err){
// 加载数据失败的处理
return
}
sd.sdMonster = sdMonster // 保存怪物的静态数据, 可以在任意地方访问
_progress += _JSON_PROGRESS
checkProgress()
})
},
checkProgress: function(){
if (this._progress >= 100){
// 资源加载完毕, 可以进入下一个界面了
cc.director.replaceScene(new anotherScene())
}
}
})
首先感谢回复。有个疑问哦:
FortInfo里的数据全是push进去的,那取的时候怎么知道哪个是我想要的值呢?我也有想过用这个思路,不过我试着用对象存储的,不过因为是异步的,也不是很方便存储。
好的,谢谢回复,我再想想
var Info = {};
Info.nType = data[i].index;
Info.nScore = data[i].fortscore;
Info.needdiamond = data[i].needdiamond;
Info.framename = data[i].framename;
FortInfo.push( Info );
实际上push的Info 是一个字典,可以获取这个字典并根据属性如nType来获取相应的数据
直接写成js文件就好了。。。
我的游戏客户端基本上没脚本,只有一个initScene.js,每次游戏开始都是从服务器下载脚本,图片文件热更新都是cc.loader进行的
因为之前用游戏框架的热更新,android是热更新下来文件后不会执行,ios没问题,于是自己重新写热更新,连服务器IP都是更新获取,不怕被封IP,呵呵