C++游戏开发中使用json
来源:互联网 发布:ugnx8.0软件下载 编辑:程序博客网 时间:2024/05/03 06:46
最近想写一个自定义的动画数据文件,按照原来的做法,先定义一个文本格式的数据文件,然后写一个转换器转换成二进制,然后游戏中读入并解析。不过我最近特别懒,虽然我已经设计了一个“万能的”文本格式和二进制转换工具,但是解析二进制文件的工作仍然繁琐,并且根据以往的经验,可能会经常的修改文件格式,于是我想直接使用文本格式吧,首先想到的是XML,不过最近实在太懒了,连XML都懒得去解析,嗯,还有google Protocol Buffers这东西,以前看过,不过似乎用的人不多啊,还有一个json,见人在游戏中用过,那么就试试他吧。。
找了几个c++的json解析器,最后选中了jsoncpp (http://jsoncpp.sourceforge.net )。首先jsoncpp是public domain的,那么就随便我怎么用了,太爽了,然后他使用的是标准c++,没有任何其他依赖(某些库还要依赖boost等东西),最后他很小巧,只有15个源文件,我直接把这些文件copy到工程里就编译了,省去了lib的配置编译连接设定等等(既然懒就懒到底了。。。),直接看文档,用法非常简单,我写了一个简单的json文件作为测试(其实是用jsoncpp的styled writer写的。。)
- {
- "float test" : 1.0,
- "interger test" : 1,
- "obj" : {
- "a" : "obja",
- "b" : "objb",
- "c" : 0.130
- },
- "str test" : "hello json!"
- }
测试代码:
- #include "json/json.h"
- #include <fstream>
- void testJson()
- {
- std::ifstream infile("test.json");
- Json::Value root;
- Json::Reader reader;
- bool ok = reader.parse(infile,root); //直接传入一个ifstream就可以了,全部解析到root中,当然文件可别太大。。对我来说这种DOM的方式是很适合的
- if(!ok)
- {
- return;
- }
- std::string name = root.get("str test","").asString(); //测试读入属性值
- std::cout<<name<<std::endl;
- //测试写入属性值,可直接生成新的键值对,以及对象,其实我之前的test.json是个空的,都是在这儿写入的
- root["interger test"] = 1;
- root["float test"] = 1.0f;
- root["obj"]["a"] = "obja";
- root["obj"]["b"] = "objb";
- root["obj"]["c"] = 0.13;
- Json::StyledWriter writer;
- std::string output = writer.write(root);
- std::cout<<output;
- //直接写入文件,搞定
- std::ofstream file("test.json");
- file<<output;
- }
使用jsoncpp简直太轻松了,我一句解析代码都没有写,直接从文件得到了json对象,有了json对象你就可以向你的游戏数据对象写入值了,或者作为早期的测试,直接使用json对象也未尝不可
- c++游戏开发中使用json
- c++游戏开发中使用json
- C++游戏开发中使用json
- 游戏开发中Json解析的套路
- android开发中使用surfaceView开发游戏
- Android游戏开发中进度条的使用
- 游戏开发中redis的使用
- 《XNA游戏开发》在战机游戏中使用Decorator模式
- JSON-C语言开发
- C#游戏开发
- Windows游戏开发(C++)
- C游戏开发中遇到的一些问题
- javaWeb 开发中 使用ssh+ajax+json 开发时,json数据转换的问题
- c/c++使用json
- json-C使用小结
- Objective-C Json 使用
- 游戏开发设计模式之原型模式 & unity3d JSON的使用(unity3d 示例实现)
- 使用python Excel转json,方便游戏策划配置与开发
- 条形码扫描示例程序
- 配置 IBM Directory Server
- 各种万能密码
- 软件的表现架构
- 脚本渗透精华
- C++游戏开发中使用json
- C# ref与out区别
- SSIS常用的包—大量插入任务(Bulk Insert task)
- delphi7找不到TBDEClientDataSet控件的解决方案
- Good Morning!
- 高性能服务器的资源和相关站点
- wordpress注意的问题
- 问起测试
- poj 1804 Brainman