微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cocos2dx 3.17Windows下 接入skynet和sprotol

大致流程一致,但是他的github上的版本,没有Windows的版本。打开他的win的工程会提示缺少一个模块。
本人环境

  • cocos2dx 3.17.1 当前最新
  • skynet-无视-当前最新
  • VS2015(机器上同时装了多个VS)
  • WIN7
  • PYTHON 2.7.9
  • @H_404_18@
    1. cocos的下载地址,下载的稳定版
      Cocos2d-x stable versions
      http://www.cocos2d-x.org/download

    2. 安装python,一定要是python2.x的
      设置好环境变量就行
      CMD-》python -V 查看确认版本
      2.7.X

    3. 然后运行Cocos2dx3.17里面的setup.py开工。。
      因为我只在WIN下跑,所以enter就行。这些ndk、sdk、ant都是要下载的通通不用设置路径。

    4. 环境配置好后重启一波就能创建工程了
      我找的一个脚本
    @echo off
    set /p projectName=please input project name:
    set /p packageName=please input package name:
    @echo cocos new %projectName% -p %packageName% -l lua -d C:\demo1
    cocos new %projectName% -p %packageName% -l lua -d C:\demo1
    @echo Create Success!!!
    1. 再然后就是进目录打开VS工程。
    2. 巨坑马上就来了。

    首先, 添加framework/cocos2d-x/external/lua/文件夹下

    /bitop /lpack /lpeg /sproto

    然后在lua_extension.c中添加些,东西,我直接把整个文件贴来了

    #include "scripting/lua-bindings/manual/network/lua_extensions.h"
    
    #if __cplusplus
    extern "C" {
    #endif
    // socket
    #include "luasocket/luasocket.h"
    #include "luasocket/luasocket_scripts.h"
    #include "luasocket/mime.h"
    
    // srpotol
    #include "sproto/lsproto.h"
    #if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
    #include "bitop/bit.h"
    #endif
    #include "lpeg/lpeg.h"
    #include "lpack/lpack.h"
    
    static luaL_Reg luax_exts[] = {
        {"socket.core",luaopen_socket_core},{"mime.core",luaopen_mime_core},//add 
        { "sproto.core",luaopen_sproto_core },#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
        { "bit",luaopen_bit },#endif
        { "lpeg",luaopen_lpeg },{ "string",luaopen_pack },//add end 
        {NULL,NULL}
    };
    
    void luaopen_lua_extensions(lua_State *L)
    {
        // load extensions
        luaL_Reg* lib = luax_exts;
        lua_getglobal(L,"package");
        lua_getfield(L,-1,"preload");
        for (; lib->func; lib++)
        {
            lua_pushcfunction(L,lib->func);
            lua_setfield(L,-2,lib->name);
        }
        lua_pop(L,2);
    
        luaopen_luasocket_scripts(L);
    }
    
    #if __cplusplus
    } // extern "C"
    #endif
    1. VS中在libluacocos2d目录里面建立对应的链接器(文件夹),把他们包含进来,
      /bitop /lpack /lpeg /sproto 这4个。

    2. 开始编译。。。。麻吉报错

    错误(活动) 未定义标识符 "luaL_reg" libluacocos2d

    真香分析后,发现这东西明明就在对应的luajit文件夹下面的头文件里面,
    经过一番挣扎,我发现。。我只是把这个类型的定义复制过来,编译一次,他提示不能重复定义,再注释就PASS了。

    //typedef struct luaL_Reg {
    //  const char *name;
    //  lua_CFunction func;
    //} luaL_Reg;
    
    static const luaL_Reg R[] =
    {
        { "pack",l_pack },{ "unpack",l_unpack },{ NULL,NULL }
    };
    1. 继续编译 报错

    LNK2019 无法解析的外部符号 _luaL_setfuncs

    真香分析后发现,这个是5.2的API,在lsprotol.c中,将
    这么一改就行。。。本来就是要用LUAJIT的。

    //#ifndef luaL_newlib /* using LuaJIT */
    #ifdef luaL_newlib /* using LuaJIT */

    理论上来5.1的lua就支持5.2的一些用法了。

    1. 把他的SRC复制过来 你的里面就能在window里面跑了。
      https://github.com/ZhaoTop/CCSkynet/tree/master/TestSproto

    理论上就OK了。收工。

    参考 https://blog.csdn.net/qq_34497362/article/details/81780342 https://blog.csdn.net/lvyan1994/article/details/83578326

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐