深度解析cocostudio是如何处理动作编辑器导出来的Json文件(2) (转)
来源:互联网 发布:二维数组的几种定义 编辑:程序博客网 时间:2024/06/05 08:47
转自:blog.csdn.net/eduwc/article/details/9926681
我们接着上文说,看看是如何处理json文件数据的
bool
Reader::readValue()
{
Token token;
skipCommentTokens( token );
bool successful = true;
if ( collectComments_ && !commentsBefore_.empty() )
{
currentValue().setComment( commentsBefore_, commentBefore );
commentsBefore_ = "";
}
//来根据不同的类型做不同的处理 来组织数据结构 到时候就方便大家使用了啊(有兴趣的同学
可以深入到每种类型的解析过程中去看看 主要就是解析完之后 用Nodes nodes_组织起来)
switch ( token.type_ )
{
case tokenObjectBegin:
successful = readObject( token );
break;
case tokenArrayBegin:
successful = readArray( token );
break;
case tokenNumber:
successful = decodeNumber( token );
break;
case tokenString:
successful = decodeString( token );
break;
case tokenTrue:
currentValue() = true;
break;
case tokenFalse:
currentValue() = false;
break;
case tokenNull:
currentValue() = Value();
break;
default:
return addError( "Syntax error: value, object or array expected.", token );
}
if ( collectComments_ )
{
lastValueEnd_ = current_;
lastValue_ = ¤tValue();
}
return successful;
}
解析
1. 用来跳过特殊符号 token.type_
type_的类型有如下这些
enum TokenType
{
tokenEndOfStream = 0,//结束符
tokenObjectBegin,//对象开始,就是{
tokenObjectEnd,//对象的结束,就是}
tokenArrayBegin,//数组的开始,就是[
tokenArrayEnd,//数组的结束,就是]
tokenString,//处理字符创
tokenNumber,//处理数字
tokenTrue,//处理bool类型 true
tokenFalse,//处理bool类型 false
tokenNull,//是否是空
tokenArraySeparator,//处理数组分割
tokenMemberSeparator,//处理数字分割
tokenComment,//处理注释
tokenError//处理错误
};
2.
switch ( token.type_ )
{
....
..
}
上面就是来根据不同的类型做不同的处理 来组织数据结构 到时候就方便大家使用了啊(有兴趣的同学
可以深入到每种类型的解析过程中去看看 主要就是解析完之后 用Nodes nodes_组织起来)
--------------------------------------------------------------华丽的分割线------------------------------------------------------------------------
我们在回过头来看看cocostudio又是如何把解析好的Json 数据组织起来的
我们回到addDataFromJsonCache
我们来看看是如何组织armature_data的数据的
跳(4)
//组织骨骼的数据
// Decode armatures
int length = json.getArrayItemCount(ARMATURE_DATA); //获取到armature_data的Json数据
for (int i = 0; i<length; i++)
{
//获取每一个节点的数据
CSJsonDictionary *armatureDic = json.getSubItemFromArray(ARMATURE_DATA, i);
//获取到骨骼数据 可以查看动作编辑器导出来的Json中的bone_data数据
ArmatureData *armatureData = decodeArmature(*armatureDic);
//把骨骼动画数据添加到ArmatureDataManager这个数据管理类里面,以后想使用的时候,直接就能用了
ArmatureDataManager::sharedArmatureDataManager()->addArmatureData(armatureData->name.c_str(), armatureData);
}
//组织动作的数据
length = json.getArrayItemCount(ANIMATION_DATA);
for (int i = 0; i<length; i++)
{
CSJsonDictionary *animationDic = json.getSubItemFromArray(ANIMATION_DATA, i);
AnimationData *animationData = decodeAnimation(*animationDic);
ArmatureDataManager::sharedArmatureDataManager()->addAnimationData(animationData->name.c_str(), animationData);
}
//组织纹理的数据
length = json.getArrayItemCount(TEXTURE_DATA);
for (int i = 0; i<length; i++)
{
CSJsonDictionary *textureDic = json.getSubItemFromArray(TEXTURE_DATA, i);
TextureData *textureData = decodeTexture(*textureDic);
ArmatureDataManager::sharedArmatureDataManager()->addTextureData(textureData->name.c_str(), textureData);
}
--------------------------------------------------------------华丽的分割线------------------------------------------------------------------------
好了 至此已经向大家展示了,从数据读入到最后的数据结构生成的全部流程。剩下的就是就是方便的使用了
举个例子:
cs::Armature *pArmature =NULL;
pArmature =cs::Armature::create("NewProject");//读取Armature_data
pArmature->getAnimation()->playByIndex(0); //播放第几个动作
pArmature->setPosition(VisibleRect::center());
addChild(pArmature);
- 深度解析cocostudio是如何处理动作编辑器导出来的Json文件(2) (转)
- 深度解析cocostudio是如何处理动作编辑器导出来的Json文件(1) (转)
- cocos2dx 2.2.2 cocostudio 数据编辑器导出的.json文件读取 解析
- cocos2dx 2.2.2 cocostudio 数据编辑器导出的.json文件读取 解析
- 解析cocostudio导出的json文件
- 加载cocostudio导出的场景后,如何在代码里获取ui组件,ui组件是ui编辑器导出后用于场景编辑器。
- JSON XML解析底层是如何处理的?
- cocos2dx-3.2rc0 vs2012 Win32工程添加CocoStudio库 并加载 CocoStudio 1.6 导出json UI编辑的文件
- IOS-分析JSON、XML的区别?JSON、XML解析方式的底层是如何处理的?
- 分析json、xml的区别?json、xml解析方式的底层是如何处理的?
- CocoStudio导出的LUA文件怎么使用?
- CocoStudio导出的LUA文件怎么使用?
- 开源Json处理工具是如何帮我们解析Json的
- 解析从Mysql导出的JSON文件
- cocoStudio UI编辑器 学习总结(转)
- 利用CocoStudio导出pvr文件的碎图方式
- Cocos2d-x加载CocoStudio导出文件的配置
- 使用响应流来输出文件(适合导出文件使用,本文主要测试的是导出excel)
- YUV格式详解及 YUV与RGB转换
- jdk与jre的区别
- php post数据,解析post数据
- 检查及设置合理的undo表空间
- 关于loadrunner录制脚本不弹出浏览器问题
- 深度解析cocostudio是如何处理动作编辑器导出来的Json文件(2) (转)
- TOJ 2196 ZOJ 1423 (Your)((Term)((Project))) 字符串处理
- sql server 有关进程的操作
- 基于Visual C++2013拆解世界五百强面试题--题10-找出N个数种最大的K个数
- 判断二维矩阵中是否存在连续四个相同的数
- ORA-00265: 要求实例恢复, 无法设置 ARCHIVELOG 模式
- 设计模式(c++)笔记之十七(Memento模式)
- 上机项目--菜单的选择
- OCP-1Z0-053-V12.02-535题