cocos2dx + Lua + json能达到不更新安装包本地更新吗?

来源:互联网 发布:菊花泡水后变绿 知乎 编辑:程序博客网 时间:2024/05/21 07:48
JSON是 JavaScript Object Notation的简称,是一种轻量的数据表示方法。json格式采用key:value的方式记录数据,非常直观,比XML简洁,因而大受欢迎
介绍json格式前,先让我们看看XML格式。显然,XML 得到了相当多的关注(正面和负面的评价都有),已经在 ajax 应用程序中广泛使用:
<request>      <firstName>PeterCao</firstName></request>

现在大部分iOS手机软件的更新模式,都受控于苹果APPStore。那么如何才能越过雷池呢?有人在看到《大掌门》的辉煌之后,提议用Lua。但我们都知道,类似于Lua这样的脚本语言,都只是作为辅助功能或者扩展功能来体现他们的价值。在cocos2dx中,其是通过tolua++来把C++的类注册到Lua之中,从而使该类在Lua中能够运用自如。因此,这就意味着,只要自定义一个C++类就必须要通过修改build.xml并且写一个pkg类来映射到tolua++中,从而注册到Lua中。这样的话,我们制定好的网络协议,万一又要添加,是不是就要修改C++代码添加新类呢?答案当然是不行的,否则就违背了我们想要本地更新的初衷了。那么我们就想到了轻量级的数据转换格式json。我们所有的网络数据需要发送的内容,都通过lua的table封装好后,通过json进行转换成指定的格式。然后透传给c++,通过c++进行加密,封装包头,然后发送出去,是不是就不用修改该c++代码了呢?好了,想到这儿,我就到网上搜索了Lua转换json的库,(cjson)

具体实现如下:

一、必备的cjson文件8个放在同一个文件夹下,导入到工程中(记得一定要link你自定义的路径)


二、找到AppDelegate.cpp,添加如下代码:

添加头文件:#include "lua_extentions.h"

在applicationDidFinishLaunching函数中,注册luaengine注册完之后,添加如下代码:

CCLuaStack *pStack = pEngine->getLuaStack();    lua_State* L = pStack->getLuaState();    luaopen_lua_extensions(L);
之后就可以根据自己的情况,在lua中封装自己的网络发送消息,和接受消息了。