大致流程一致,但是他的github上的版本,沒有Windows的版本。打開他的win的工程會提示缺少一個模塊。
本人環境
- cocos2dx 3.17.1 當前最新
- skynet-無視-當前最新
- VS2015(機器上同時裝了多個VS)
- WIN7
- PYTHON 2.7.9
-
cocos的下載地址,下載的穩定版
Cocos2d-x stable versions
http://www.cocos2d-x.org/download -
安裝python,一定要是python2.x的
設置好環境變量就行
CMD-》python -V 查看確認版本
2.7.X -
然后運行Cocos2dx3.17里面的setup.py開工。。
因為我只在WIN下跑,所以enter就行。這些ndk、sdk、ant都是要下載的通通不用設置路徑。 -
環境配置好后重啟一波就能創建工程了
我找的一個腳本
@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!!!
- 再然后就是進目錄打開VS工程。
- 巨坑馬上就來了。
首先, 添加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
-
VS中在libluacocos2d目錄里面建立對應的鏈接器(文件夾),把他們包含進來,
/bitop /lpack /lpeg /sproto 這4個。 -
開始編譯。。。。麻吉報錯
錯誤(活動) 未定義標識符 "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 }
};
- 繼續編譯 報錯
LNK2019 無法解析的外部符號 _luaL_setfuncs
真香分析后發現,這個是5.2的API,在lsprotol.c中,將
這么一改就行。。。本來就是要用LUAJIT的。
//#ifndef luaL_newlib /* using LuaJIT */
#ifdef luaL_newlib /* using LuaJIT */
理論上來5.1的lua就支持5.2的一些用法了。
- 把他的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