之前一直用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数据结构 简易版.的更多相关文章

  1. DI 原理解析 并实现一个简易版 DI 容器

    本文基于自身理解进行输出,目的在于交流学习,如有不对,还望各位看官指出. DI DI-Dependency Injection,即"依赖注入":对象之间依赖关系由容器在运行期决定, ...

  2. Cocos2d-x 脚本语言Lua基本数据结构-表(table)

    Cocos2d-x 脚本语言Lua基本数据结构-表(table) table是Lua中唯一的数据结构.其它语言所提供的数据结构,如:arrays.records.lists.queues.sets等. ...

  3. cocos2d-x lua table数据存储

    cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...

  4. cocos2d-x lua table与json的转换

    cocos2d-x lua table与json的转换 version: cocos2d-x 3.6 1.引入json库 require("src/cocos/cocos2d/json&qu ...

  5. lua table长度解析

    先来看lua table源码长度获取部分(ltable.c) j是数组部分的长度.首先判断数组长度大于0,并且数组最后一个是nil,就用二分法查找,返回长度. 如果t->node是 table的 ...

  6. 使用 LinkedBlockingQueue 实现简易版线程池

    前一阵子在做联系人的导入功能,使用POI组件解析Excel文件后获取到联系人列表,校验之后批量导入.单从技术层面来说,导入操作通常情况下是一个比较耗时的操作,而且如果联系人达到几万.几十万级别,必须拆 ...

  7. Vue源码分析之实现一个简易版的Vue

    目标 参考 https://cn.vuejs.org/v2/guide/reactivity.html 使用 Typescript 编写简易版的 vue 实现数据的响应式和基本的视图渲染,以及双向绑定 ...

  8. 如何实现一个简易版的 Spring - 如何实现 Setter 注入

    前言 之前在 上篇 提到过会实现一个简易版的 IoC 和 AOP,今天它终于来了...相信对于使用 Java 开发语言的朋友们都使用过或者听说过 Spring 这个开发框架,绝大部分的企业级开发中都离 ...

  9. 如何实现一个简易版的 Spring - 如何实现 Constructor 注入

    前言 本文是「如何实现一个简易版的 Spring」系列的第二篇,在 第一篇 介绍了如何实现一个基于 XML 的简单 Setter 注入,这篇来看看要如何去实现一个简单的 Constructor 注入功 ...

随机推荐

  1. Matlab中常用操作

    (1)换行操作: 末尾加上“...”,然后加enter:有时候多条语句重起一行,这时shift+enter >> 4*sin(0.3)*...8 (2)一些快捷键: Ctrl+R 可多行同 ...

  2. HDOJ/HDU 2562 奇偶位互换(交换位置~)

    Problem Description 给定一个长度为偶数位的0,1字符串,请编程实现串的奇偶位互换. Input 输入包含多组测试数据: 输入的第一行是一个整数C,表示有C测试数据: 接下来是C组测 ...

  3. Pipe - POJ 1039(线段相交交点)

    题目大意:有一个不反光并且不透光的管道,现在有一束光线从最左端进入,问能达到的最右端是多少,输出x坐标.   分析:刚开始做是直接枚举两个点然后和管道进行相交查询,不过这样做需要考虑的太多,细节不容易 ...

  4. SPOJ 375 (树链剖分+线段树)

    题意:一棵包含N 个结点的树,每条边都有一个权值,要求模拟两种操作:(1)改变某条边的权值,(2)询问U,V 之间的路径中权值最大的边. 思路:最近比赛总是看到有树链剖分的题目,就看了论文,做了这题, ...

  5. JavaScript实现简单的打印功能

    var printSetup = function(){ // 打印页面设置 wb.execwb(8,1); }; var printPreView = function(){ // 打印页面预览 w ...

  6. [NOIP2015pj题解]From某因为时间快了那么一点点超过下一位的蒟蒻(其实是纯代码).

    第一题,很水,直接上代码 #include <iostream> #include <fstream> #include <cstdlib> /* run this ...

  7. Hibernate环境搭建超详细

    前言 环境搭建其实可以简单到导入相关jar包即可. 但是对于学习来说,这个环境搭建的内容还是挺多的,目的是提供一个让我们如何快速学习和掌握类库的学习环境.作为程序猿,学习和使用类库是必须掌握的技能.如 ...

  8. 在Windows上安装私有GitHub的开源替代-GitLab

    在我之前的一篇博客中介绍过GitLab: 开源免费的git管理工具,今天说一下怎么在windows安装GitLab. BitNami可以很容易的帮助你安装开源应用,和Helicon Zoo类似,我之前 ...

  9. 使用javah生成.h文件, 出现无法访问android.app,Activity的错误的解决

    在工程ndk22/bin/classes中 运行javah  com.cn.ndk22.Ndk22.Activity ,出现了.h文件 我在bin/classes目录中 ,就是无法访问, : 错误:无 ...

  10. HDOJ 4696 Answers 乱搞

    乱搞: rt.有1就能输出全部的数,否则仅仅能输出偶数 Answers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/1 ...