cocos2dx 3.17(Windows下) 接入skynet和sprotol
大致流程一致,但是他的github上的版本,没有Windows的版本。打开他的win的工程会提示缺少一个模块。
@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!!!
首先, 添加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
真香分析后,发现这东西明明就在对应的luajit文件夹下面的头文件里面, //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 } };
真香分析后发现,这个是5.2的API,在lsprotol.c中,将 //#ifndef luaL_newlib /* using LuaJIT */ #ifdef luaL_newlib /* using LuaJIT */ 理论上来5.1的lua就支持5.2的一些用法了。
理论上就OK了。收工。 参考 https://blog.csdn.net/qq_34497362/article/details/81780342 https://blog.csdn.net/lvyan1994/article/details/83578326 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |