cocos2dx解析lua table数据结构 简易版.
之前一直用xml填配置, cocos2dx自带了xml解析接口, 非常方便.
但是, 接口好用也改变不了xml的结构字符太多, 书写麻烦, 乱七八糟的事实.
很早就想换lua, 无奈引擎没有现成接口, 也一直拖到今天.
inline ccValue parseTable(lua_State *lua)
{
ccValue value;
ccValue result;
lua_pushnil(lua);
!= lua_next(lua, -))
{
))
{
case LUA_TBOOLEAN:
value = lua_toboolean(lua, -) != ;
break;
case LUA_TNUMBER:
value = lua_tonumber(lua, -);
break;
case LUA_TSTRING:
value = lua_tostring(lua, -);
break;
case LUA_TTABLE:
value = parseTable(lua);
break;
default:
CC_ASSERT(nullptr);
break;
}
))
{
if (result.isNull())
{
result = ccValueVector();
}
result.asValueVector().push_back(value);
}
else
{
if (result.isNull())
{
result = ccValueMap();
}
result.asValueMap().insert(
std::make_pair(lua_tostring(lua, -), value));
}
lua_pop(lua, );
}
return result;
}
ccValue getValueFromFile(const std::string &fileName)
{
auto luaCode = ccFileUtils::getInstance()->getStringFromFile(fileName);
luaL_loadstring(_plua, luaCode.c_str());
auto ret = runCall(, );
CC_ASSERT(ret && lua_gettop(_plua) == );
auto result = parseTable(_plua);
lua_pop(_plua, );
return result;
}
数组用vector, 哈希用map.
这个实现很简单, 只支持number, string, table数据结构.
作为配置, 支持这些就足够了.
cocos2dx解析lua table数据结构 简易版.的更多相关文章
- DI 原理解析 并实现一个简易版 DI 容器
本文基于自身理解进行输出,目的在于交流学习,如有不对,还望各位看官指出. DI DI-Dependency Injection,即"依赖注入":对象之间依赖关系由容器在运行期决定, ...
- Cocos2d-x 脚本语言Lua基本数据结构-表(table)
Cocos2d-x 脚本语言Lua基本数据结构-表(table) table是Lua中唯一的数据结构.其它语言所提供的数据结构,如:arrays.records.lists.queues.sets等. ...
- cocos2d-x lua table数据存储
cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...
- cocos2d-x lua table与json的转换
cocos2d-x lua table与json的转换 version: cocos2d-x 3.6 1.引入json库 require("src/cocos/cocos2d/json&qu ...
- lua table长度解析
先来看lua table源码长度获取部分(ltable.c) j是数组部分的长度.首先判断数组长度大于0,并且数组最后一个是nil,就用二分法查找,返回长度. 如果t->node是 table的 ...
- 使用 LinkedBlockingQueue 实现简易版线程池
前一阵子在做联系人的导入功能,使用POI组件解析Excel文件后获取到联系人列表,校验之后批量导入.单从技术层面来说,导入操作通常情况下是一个比较耗时的操作,而且如果联系人达到几万.几十万级别,必须拆 ...
- Vue源码分析之实现一个简易版的Vue
目标 参考 https://cn.vuejs.org/v2/guide/reactivity.html 使用 Typescript 编写简易版的 vue 实现数据的响应式和基本的视图渲染,以及双向绑定 ...
- 如何实现一个简易版的 Spring - 如何实现 Setter 注入
前言 之前在 上篇 提到过会实现一个简易版的 IoC 和 AOP,今天它终于来了...相信对于使用 Java 开发语言的朋友们都使用过或者听说过 Spring 这个开发框架,绝大部分的企业级开发中都离 ...
- 如何实现一个简易版的 Spring - 如何实现 Constructor 注入
前言 本文是「如何实现一个简易版的 Spring」系列的第二篇,在 第一篇 介绍了如何实现一个基于 XML 的简单 Setter 注入,这篇来看看要如何去实现一个简单的 Constructor 注入功 ...
随机推荐
- C++0x对局部静态初始化作出了线程安全的要求,singleton的写法可以回归到最原始的方式
class Foo{public: staticFoo& instance(void) { static Foo s_instance; return s_instance; }}; 以下摘自 ...
- ☀【SeaJS】SeaJS Grunt构建
如何使用Grunt构建一个中型项目?https://github.com/twinstony/seajs-grunt-build spmjshttp://docs.spmjs.org/doc/inde ...
- (转载)mysql_query( )返回值
(转载)http://hi.baidu.com/tfbzccqceabfhyd/item/bd01db9f8995204af04215e4 调用mysql_query( ),当查询操作是update. ...
- Microsoft JScript 运行时错误: Automation 服务器不能创建对象
var WshShell = new ActiveXObject('WScript.Shell') WshShell.SendKeys( '{F11}'); 问题: ...
- POJ 2260(ZOJ 1949) Error Correction 一个水题
Description A boolean matrix has the parity property when each row and each column has an even sum, ...
- 【PHP】php+txt实现网页计数器(限IP统计方式和不限IP统计方式)
一般的网页计数器制作实现思路:首先设定存放统计数据的文件(counter.txt)——读取文件中的内容存入字符串——自加操作——以写入方式打开文件写入数据——从文件中输出统计数据——关闭文件. 代码: ...
- mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...
- jsp页面写入中文到mysql时出现了乱码(转)
今天自己在用jsp把中文写入mysql的时候出现乱码,从数据库中读取出来的时候也显示为“??”,感觉应该出现了编码转换过程中的字符信息丢失.然后在mysql中直接执行该命令,发现中文是正常的,所有认为 ...
- docker 查看容器详细
http://www.docker.org.cn/book/docker/checking-running-image-12.html
- 查询,创建,扩充表空间&&impdp--------表空间大全
周六晚上还在办公室导入数据. 按schemas导入成功的关键是:导入的环境和源数据环境里面的表空间大小,表空间名字,需要一模一样 (当然,表空间大小创建到和源数据环境里面ues_size大小就可以了) ...