在cocos2dx 中使用Cjson解析json数据

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wqwtan/article/details/77881441

为什么要用cjson呢,应为cjson得解析速度使用c,速度更快,比起2dx封装的简单的lua来讲要快很多

以下问题操作都来自于 mac os , xcode


一 :默认cocos2dx 是没有引入cjson,但是本地已经有了cjson库文件

这里写图片描述

二: 记住导入工程时选择对应的target,博主我当时选择了“libcocos2dlua mac” 导致调试ios时一直读不到文件,应该选择“libcocos2dlua iOS”

这里写图片描述

三:默认携带的lua_cjson.h文件中包含了两个函数

intluaopen_cjson(lua_State *l);
int luaopen_cjson_safe(lua_State *l);

  • 在AppDelegate中调用这两个函数
  • 此时编译程序,会报错,大概就是编译器找不到luaopen_cjson
  • 此时可以发现是缺少宏命令extern所导致
    • 解决办法如下:
    • 添加宏命令 #if __cplusplus #endif
    • 添加引用全局变量 extern “C” 指定此段使用C编译器
        #if __cplusplus
          extern"C" {
        #endif

            #include "lauxlib.h"

            void  LUA_EXTENSIONS_DLL
            luaopen_lua_extensions(lua_State *L);

      #if __cplusplus
            }
      #endif

四:第三部解决之后,可以编译通过,但是遇到下一个问题:

local cjson = require(“cjson”)
导入cjson之后程序会报错, module not found ‘cjson’

应为cocos得lua注册风格有两部需要注意,这个在luaopen_cjson中并没有被封装,所以得自己加
ps. 这里其实可以完全借鉴Luasocket.c的lua注册方式

  • step1. 需要添加全局module’package’
  • step2. 获取全局_G
  • step3. 需要添加变量 ‘preload’
  • step4. 此时调用对应的luaopen_cjson

如图这里写图片描述

五:此时编译如下例子成功

这里写图片描述

总结:解决此库编译问题,主要是注意Lua环境变量,是否全局,是否load,以及C端注册绑定的地方是否有问题。

展开阅读全文

没有更多推荐了,返回首页