之前一直用xml填配置, cocos2dx自带了xml解析接口, 非常方便.

但是, 接口好用也改变不了xml的结构字符太多, 书写麻烦, 乱七八糟的事实.

很早就想换lua, 无奈引擎没有现成接口, 也一直拖到今天.

  1. inline ccValue parseTable(lua_State *lua)
  2. {
  3. ccValue value;
  4. ccValue result;
  5. lua_pushnil(lua);
  6. != lua_next(lua, -))
  7. {
  8. ))
  9. {
  10. case LUA_TBOOLEAN:
  11. value = lua_toboolean(lua, -) != ;
  12. break;
  13. case LUA_TNUMBER:
  14. value = lua_tonumber(lua, -);
  15. break;
  16. case LUA_TSTRING:
  17. value = lua_tostring(lua, -);
  18. break;
  19. case LUA_TTABLE:
  20. value = parseTable(lua);
  21. break;
  22. default:
  23. CC_ASSERT(nullptr);
  24. break;
  25. }
  26. ))
  27. {
  28. if (result.isNull())
  29. {
  30. result = ccValueVector();
  31. }
  32. result.asValueVector().push_back(value);
  33. }
  34. else
  35. {
  36. if (result.isNull())
  37. {
  38. result = ccValueMap();
  39. }
  40. result.asValueMap().insert(
  41. std::make_pair(lua_tostring(lua, -), value));
  42. }
  43. lua_pop(lua, );
  44. }
  45. return result;
  46. }
  1. ccValue getValueFromFile(const std::string &fileName)
  2. {
  3. auto luaCode = ccFileUtils::getInstance()->getStringFromFile(fileName);
  4. luaL_loadstring(_plua, luaCode.c_str());
  5. auto ret = runCall(, );
  6. CC_ASSERT(ret && lua_gettop(_plua) == );
  7. auto result = parseTable(_plua);
  8. lua_pop(_plua, );
  9. return result;
  10. }

数组用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. C++0x对局部静态初始化作出了线程安全的要求,singleton的写法可以回归到最原始的方式

    class Foo{public: staticFoo& instance(void) { static Foo s_instance; return s_instance; }}; 以下摘自 ...

  2. leetcode First Missing Positive hashset简单应用

    public class Solution { public int firstMissingPositive(int[] A) { HashSet<Integer> hash=new H ...

  3. MongoDB性能优化指南

    一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样.其实可以这样说说,索引 ...

  4. Spark RDD概念学习系列之rdd的依赖关系彻底解密(十九)

    本期内容: 1.RDD依赖关系的本质内幕 2.依赖关系下的数据流视图 3.经典的RDD依赖关系解析 4.RDD依赖关系源码内幕 1.RDD依赖关系的本质内幕 由于RDD是粗粒度的操作数据集,每个Tra ...

  5. eCos系统CPU负载测量

    原文:http://ecos.sourceware.org/docs-latest/ref/services-cpuload.html 译文:http://blog.csdn.net/zoomdy/a ...

  6. 20169210《Linux内核原理与分析》第一周作业

    第一次接触Linux,还是有点不适应的,与Windows区别还是比较大的.在免费与收费.软件与支持.安全性.使用习惯.可定制性和应用范畴等方面都有区别. 通过实验楼的<Linux基础入门(新版) ...

  7. JAVA获取随机数

    在Java中我们能够使用java.util.Random类来产生一个随机数发生器.它有两种形式的构造函数,各自是Random()和Random(long seed).Random()使用当前时间即Sy ...

  8. 慢查询日志 与 general_log

            慢查询日志: 打开慢查询日志: set global slow_query_log=on; 输出格式定义:log_output: [file|table] FILE: set glob ...

  9. linux文件系统和mount(硬盘,win分区,光驱,U盘)

    fdisk –l查看dos/win/ext2分区(partiton,不是slice,slice是solaris分区) [root@localhost etc]# /sbin/fdisk -l Disk ...

  10. struts2 OGNL 表达式

    一.Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言:JSTL(JSP Standard ...