ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          Cocos2d-x 已經(jīng)提供了對 Lua 的基本支持,但除了 Lua 的基本庫外,并沒有捆綁一些常用庫,例如 LuaSocket。

          經(jīng)過一番嘗試,終于搞定了此問題 :)

          獲得 LuaSocket 源代碼后,在 cocos2d-x 項目的 libs/lua 目錄中建立子目錄 exts/luasocket,并將 luasocket-2.0.2/src 目錄中所有的 *.c/*.h 文件拷貝到 libs/lua/exts/luasocket 目錄中。

          在 libs/lua/exts 目錄中建立文件:

          lualoadexts.h

          #ifndef __LUALOADEXTS_H_ #define __LUALOADEXTS_H_  #include "lauxlib.h"  void luax_initpreload(lua_State *L);  #endif // __LUALOADEXTS_H_ 

          lualoadexts.c

          #include "lualoadexts.h"  // luasocket #include "luasocket.h" #include "mime.h"  static luaL_Reg luax_preload_list[] = {     {"socket.core", luaopen_socket_core},     {"mime.core", luaopen_mime_core},     {NULL, NULL} };  void luax_initpreload(lua_State *L) {     luaL_Reg* lib = luax_preload_list;     luaL_findtable(L, LUA_GLOBALSINDEX, "package.preload",                    sizeof(luax_preload_list)/sizeof(luax_preload_list[0])-1);     for (; lib->func; lib++) {         lua_pushstring(L, lib->name);         lua_pushcfunction(L, lib->func);         lua_rawset(L, -3);     }     lua_pop(L, 1); } 

          最后,打開 libs/lua/cocos2dx_support/LuaEngineImpl.cpp 文件,在 CCLuaScriptModule::CCLuaScriptModule() 構(gòu)造函數(shù)最后載入 Lua 標(biāo)準(zhǔn)庫和擴(kuò)展庫的代碼:

          CCLuaScriptModule::CCLuaScriptModule() {     d_ownsState = true;     d_state = lua_open();     luaL_openlibs(d_state);     int nOpen = tolua_Cocos2d_open(d_state);     CC_UNUSED_PARAM(nOpen);     nOpen = tolua_SimpleAudioEngine_open(d_state);     CC_UNUSED_PARAM(nOpen);      // init standard libraries     luaL_openlibs(d_state);     // init more libraries     luax_initpreload(d_state); } 

          LuaScoket 除了 C 代碼,還有一部分是 Lua 代碼,所以需要將 luasocket-2.0.2/src/*.lua 復(fù)制到項目中,然后用下列 Lua 代碼進(jìn)行測試:

          local socket = require("socket") print("socket module:", socket) print("socket.connect function:", socket.connect) print("socket.bind function:", socket.bind)  print("\n") print("io module:", io) 
          posted on 2012-02-08 00:03 ivaneeo 閱讀(4043) 評論(0)  編輯  收藏 所屬分類: lua-擼語言
          主站蜘蛛池模板: 那坡县| 顺昌县| 奉节县| 临江市| 伊吾县| 房山区| 建水县| 翁牛特旗| 山西省| 湖北省| 武城县| 博野县| 错那县| 凉城县| 桃源县| 宝兴县| 阆中市| 常州市| 晋州市| 德昌县| 吉安市| 得荣县| 安福县| 五大连池市| 乐陵市| 隆尧县| 巴南区| 莲花县| 永吉县| 房山区| 郓城县| 紫金县| 海宁市| 共和县| 梅河口市| 宁国市| 田林县| 大埔县| 海宁市| 黑龙江省| 永吉县|