精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Lua游戲開發中關于C接口學習教程

移動開發 iOS 游戲開發
Lua游戲開發中關于C接口是本文要介紹的內容,主要是來學習LUA中關于C接口的使用方法,具體內容的實現來看本文詳解。

Lua游戲開發中關于C接口是本文要介紹的內容,主要是來學習LUA中關于C接口的使用方法,具體內容的實現來看本文詳解。

lua快一年了,因為引擎部分比較少改動,所以一直沒用過它的C接口,都是在寫腳本。年前看書時寫了一個小的demo做學習用,好像當時遇到些困難,但是沒有記錄下來,幾乎都忘了。這里貼點源碼出來做備忘吧:)lua的語法還是比較簡單,其官網(www.lua.org)上有電子文檔(www.lua.org/pil/),看一看就會了。不過學會一門語言的語法跟用好一門語言還是兩回事,好在它的源碼也不多,多看看源碼理解就深了。

首先說我比較討厭lua的幾個地方:

1、把數組和table混在一起,數組可以很方便取得size,而table就只能自己遍歷去數。

2、沒有continue,經常出現循環里面嵌套N層if。

3、最最無聊的就是變量默認是global的,要顯示聲明local才是本地變量。

大概就這幾個公認的問題了,下面貼代碼:)

程序實現了一個lua解釋器,其實就是讀入lua語句然后解釋執行,用了readline是為了輸入方便。另外啟動的時候load了一個叫init.lua的腳本文件,提供了幾個api供腳本使用,全部代碼如下:(csdn怎么不提供附件功能呢)

  1. main.hpp  
  2. #include <unistd.h> 
  3. #include <sys/param.h> 
  4. #include <errno.h> 
  5. #include <stdlib.h> 
  6. #include <iostream> 
  7. #include <readline/readline.h> 
  8. #include <readline/history.h> 
  9. #include <lua.hpp> 
  10. extern lua_State *L;   
  11. bool exelua(const char*);  
  12. bool init_script();  
  13. int lua_getcwd(lua_State*);  
  14. int lua_dir(lua_State*);  
  15. void register_api(lua_State*);  
  16. void create_table(lua_State*);  
  17. main.cpp  
  18. #include "main.hpp"  
  19.  
  20. lua_State *L;   
  21.  
  22. int main(int argc, char** argv)  
  23. ...{   
  24.         L = luaL_newstate();//創建一個lua運行環境,可以傳入一個內存管理參數  
  25.         luaL_openlibs(L);//打開常用lib  
  26.         if ( ! init_script() )//load腳本  
  27.                 return -1;   
  28.         register_api(L);//注冊api  
  29.         create_table(L);//創建一個table  
  30.         char* input = NULL;  
  31.         while(1)  
  32.         ...{     
  33.                 input = readline(">>");//提示輸入  
  34.                 if (input)  
  35.                 ...{     
  36.                         if ( *input )  
  37.                         ...{     
  38.                                 if( exelua(input) )//執行輸入的語句  
  39.                                         add_history(input);//增加到歷史命令  
  40.                         }     
  41.                         free(input);  
  42.                         input = NULL;  
  43.                 }     
  44.                 else  
  45.                 ...{     
  46.                         break;  
  47.                 }     
  48.         }     
  49.         lua_close(L);  
  50.         return 0;  
  51. }  
  52. bool exelua(const char* line)  
  53. ...{  
  54.         int error = luaL_loadbuffer(L, line, strlen(line), "line") || lua_pcall(L, 0, 0, 0);//load并執行   
  55.         if ( error )  
  56.         ...{     
  57.                 std::cerr << lua_tostring(L, -1) << std::endl;  
  58.                 lua_pop(L, 1);   
  59.                 return false;  
  60.         }     
  61.         return true;  
  62. }  
  63. bool init_script()  
  64. ...{  
  65.         if ( luaL_dofile(L, "init.lua") != 0 )   
  66.         ...{  
  67.                 std::cerr << "load init.lua failed ";  
  68.                 return false;  
  69.         }  
  70.         lua_pushnumber(L, 1);//傳入參數  
  71.         lua_getglobal(L, "__init__");//獲取腳本中__init__變量  
  72.         if ( lua_isfunction(L, -1) )//判斷__init__是否一個函數  
  73.         ...{  
  74.                 if ( lua_pcall(L, 0, 1, NULL) != 0 )//調用__init__  
  75.                 ...{  
  76.                         std::cerr << "call __init__ error ";  
  77.                         return false;  
  78.                 }  
  79.                 int ret = lua_tonumber(L, -1) || lua_toboolean(L, -1);//取得__init__的返回值  
  80.                 lua_pop(L, 1);  
  81.                 if ( !ret )  
  82.                 ...{  
  83.                         std::cerr << "__init__ failed ";  
  84.                         return false;  
  85.                 }  
  86.         }  
  87.         return true;  
  88. }  
  89. api.cpp  
  90. #include <dirent.h> 
  91. #include "main.hpp"  
  92. int lua_getcwd(lua_State* L)//獲取當前工作目錄  
  93. ...{  
  94.         char path[MAXPATHLEN];  
  95.         bzero(path, MAXPATHLEN);  
  96.         if (lua_gettop(L) != 0 ) //不需要參數  
  97.         ...{     
  98.                 luaL_argerror(L, 0, "no arg expected");  
  99.                 return 0;  
  100.         }     
  101.         if ( !getcwd(path, MAXPATHLEN) )  
  102.         ...{     
  103.                 luaL_error(L, "getcwd error %d, %s", errno, strerror(errno));  
  104.                 return 0;  
  105.         }     
  106.         lua_pushlstring(L, path, strlen(path));//將返回值壓棧  
  107.         return 1;//返回返回值個數  
  108. }  
  109. int lua_dir(lua_State* L)//取得目錄下元素  
  110. ...{  
  111.         const char* path = luaL_checkstring(L, 1);   
  112.         DIR* dir = opendir(path);  
  113.         if ( !dir )  
  114.         ...{     
  115.                 lua_pushnil(L);  
  116.                 lua_pushstring(L, strerror(errno));  
  117.                 return 2;  
  118.         }     
  119.         int i = 1;  
  120.         struct dirent *ent;  
  121.         lua_newtable(L);//把所有元素放到一個table中,以數組返回  
  122.         while( ent = readdir(dir) )  
  123.         ...{     
  124.                 lua_pushnumber(L, i++);  
  125.                 lua_pushstring(L, ent->d_name);  
  126.                 lua_settable(L, -3);  
  127.         }     
  128.         closedir(dir);  
  129.         return 1;  
  130. }  
  131. void register_api(lua_State* L)//注冊api  
  132. ...{  
  133.         lua_register(L, "getcwd", lua_getcwd);//腳本中可以使用getcwd調用lua_getcwd  
  134.         lua_register(L, "dir", lua_dir);  
  135.         const luaL_Reg mylib[] =   
  136.         ...{     
  137.                 ...{"getcwd", lua_getcwd},  
  138.                 ...{"dir", lua_dir},  
  139.                 ...{NULL, NULL},  
  140.         };  
  141.         luaL_register(L, "tlib", mylib);//注冊一個名為tlib的模塊,tlib.getcwd()  
  142. }  
  143. void create_table(lua_State* L)//創建一個table  
  144. ...{  
  145.         lua_newtable(L);  
  146.         lua_pushnumber(L, 123);  
  147.         lua_setfield(L, -2, "id");  
  148.         lua_pushcfunction(L, lua_getcwd);  
  149.         lua_setfield(L, -2, "fun");  
  150.         lua_setglobal(L, "tb");  
  151. }  
  152. init.lua  
  153. function __init__()  
  154.         print("__init__ ok")  
  155.         return 1;  
  156. end  
  157. Makefile CPPFLAGS=-Wall -g -O0 -I /usr/local/include/lua51/  
  158. LIB=-L/usr/local/lib/lua51/ -llua -lreadline  
  159. CC=g++  
  160. SRC=main.cpp api.cpp  
  161. OBJ=${SRC:%.cpp=%.o}  
  162. all: depend main  
  163. depend:  
  164.         @$(CC) -MM $(SRC)  > .depend  
  165. -include .depend  
  166. main: $(OBJ)  
  167.         $(CC) $(OBJ) $(CPPFLAGS)  $(LIB) -o $@  
  168. clean:  
  169.         -rm -rf *.o main .depend 

       
以上代碼在freebsd 6.2  gcc 3.4.6 lua 5.1.2下編譯通過。

小結:Lua游戲開發中關于C接口學習教程的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: CSDN博客
相關推薦

2011-08-24 13:56:12

Lua游戲

2011-08-23 16:37:05

Lua數學庫

2011-08-24 17:09:35

LUA閉包函數

2011-08-23 15:34:56

Lua模式 匹配

2011-08-24 14:14:13

LUA環境 配置

2011-08-23 17:06:03

2011-08-23 16:48:41

Lua 5.1API 函數

2011-08-25 15:41:42

Lua源碼

2011-08-24 15:34:44

MinGWLua環境配置

2011-08-24 15:42:38

LUA源代碼

2011-08-23 13:54:10

LUA全局變量

2011-08-23 16:59:16

C++LUA腳本LUA API

2011-08-23 15:57:21

Lua元表元方法

2011-08-24 11:08:09

Lua

2011-08-23 17:33:08

LuaMetatable

2011-08-24 15:22:09

2011-08-25 17:01:50

LUA網游游戲

2011-08-25 16:20:33

Lua腳本變量

2011-08-23 17:11:13

Lua事件C#

2011-08-09 16:08:58

IOS游戲Cocos2d
點贊
收藏

51CTO技術棧公眾號

国产成一区二区| 国产视频精品久久久| 一本大道东京热无码aⅴ| 99国产精品久久久久99打野战| 中文字幕日韩一区二区不卡 | 自拍偷拍校园春色| 第四色成人网| 亚洲成人黄色网址| 久久久精品麻豆| 91在线中文| jizz一区二区| 成人黄色免费片| 亚洲精品视频在线观看免费视频| 国语产色综合| 亚洲成人精品久久| 一级黄色特级片| 成人在线黄色电影| 国产精品国产馆在线真实露脸| 99久久久精品免费观看国产| 欧美一级片免费在线观看| 欧美第一精品| 亚洲精品中文字幕有码专区| 波多野结衣在线免费观看| 在线亚洲人成| 亚洲国产精品一区二区www在线| 蜜桃传媒视频第一区入口在线看| 国产美女无遮挡永久免费| 久久精品综合| 欧美成人一二三| 亚洲精品午夜视频| 97人人澡人人爽91综合色| 欧美手机在线视频| 国产无套内射久久久国产| 污污视频在线看| 亚洲国产精品99久久久久久久久| 久久精品国产精品国产精品污 | 欧美视频免费播放| h片在线观看| 亚洲免费色视频| 亚洲欧美日韩国产成人综合一二三区| 三级视频网站在线| 成人深夜福利app| 91免费版黄色| 999久久久久| 久草这里只有精品视频| 国产精品福利久久久| 天天插天天操天天干| 亚洲先锋成人| 欧美激情a∨在线视频播放| 欧美视频一区二区在线| 日韩欧美午夜| 最新的欧美黄色| 少妇av片在线观看| 国产日产精品_国产精品毛片| 亚洲激情国产精品| v天堂中文在线| 美国十次av导航亚洲入口| 欧美精品一区二区在线播放| 国产ts在线观看| 亚洲成人黄色| 欧美精品一区二区三区在线| 中文字幕一区二区三区乱码不卡| av日韩在线播放| 欧美一区二区在线看| 下面一进一出好爽视频| 色综合视频一区二区三区44| 欧美日韩大陆一区二区| 亚洲天堂网2018| 成人污污www网站免费丝瓜| 91精品婷婷国产综合久久竹菊| 一本一道久久a久久综合蜜桃| 伊人国产精品| 日韩一区二区免费电影| 超碰caoprom| 羞羞答答一区二区| 国产一区二区三区视频| 黄色精品视频在线观看| 欧美激情综合色综合啪啪| 韩国19禁主播vip福利视频| 国产精品一区二区6| 三级成人在线视频| 91麻豆国产语对白在线观看| 亚洲精品国偷拍自产在线观看蜜桃| 成人听书哪个软件好| 欧美精品欧美精品系列c| 91在线视频免费看| 亚洲黄色av一区| 无罩大乳的熟妇正在播放| 桃花岛tv亚洲品质| 6080午夜不卡| 亚洲中文字幕无码av| 精品成av人一区二区三区| 久久精品国产久精国产思思| 日本三级中文字幕| 日本在线不卡视频| 国产精品毛片va一区二区三区| 国际av在线| 亚洲精品视频在线观看网站| 欧美极品欧美精品欧美| 伊人久久一区| 日韩av在线免费观看| 人人艹在线视频| 中文国产一区| 国产主播精品在线| 天堂v视频永久在线播放| 中文字幕在线视频一区| 男人日女人下面视频| 亚洲午夜国产成人| 亚洲精品视频在线观看视频| 五月天丁香激情| 日本伊人午夜精品| 精品国产乱码久久久久久108| 9191在线| 欧美午夜美女看片| 18深夜在线观看免费视频| 国产一区二区三区日韩精品| 久久久久久久亚洲精品| 97超碰资源站| 国产欧美日韩在线视频| 免费av手机在线观看| 日本成人精品| 日韩最新在线视频| 69视频免费看| 久久综合色综合88| 野外做受又硬又粗又大视频√| 久久亚洲精品人成综合网| 亚洲电影免费观看高清完整版在线观看| 精品亚洲aⅴ无码一区二区三区| 亚洲精选在线| av一区二区三区免费| 粗大黑人巨茎大战欧美成人| 欧美网站一区二区| 性欧美13一14内谢| 亚洲免费大片| 国产综合av一区二区三区| a在线免费观看| 在线电影院国产精品| 日本污视频网站| 久久精品三级| 麻豆成人在线播放| 白浆在线视频| 亚洲国产精品女人久久久| 国产一级片免费看| 国产91精品欧美| 日本人妻伦在线中文字幕| 亚洲爽爆av| 久久亚洲国产成人| 国产视频在线观看视频| 亚洲欧美精品午睡沙发| 97超碰人人看| 韩国亚洲精品| 国产一区二区三区高清视频| 国产精品论坛| 亚洲精品久久久久久久久久久久久 | 久久综合色88| 国产女18毛片多18精品| 亚洲免费观看视频| 麻豆tv在线观看| 激情偷拍久久| 久久久神马电影| 成人黄色免费短视频| 中文字幕国产亚洲| 国产精品高潮呻吟AV无码| 日韩码欧中文字| 久久久久中文字幕亚洲精品 | www.日日操| 日本久久黄色| 91九色偷拍| 日韩脚交footjobhd| 亚洲色图校园春色| 中文字幕乱码无码人妻系列蜜桃| 国产精品成人免费| 亚洲精品久久久久久| 亚洲欧洲另类| 日韩av电影免费观看| 在线日韩三级| 国内精品久久久久影院优| 四虎精品成人免费网站| 欧美亚洲日本国产| 欧美日韩在线视频免费| av男人天堂一区| 午夜两性免费视频| 欧美天堂亚洲电影院在线观看 | 婷婷伊人综合| 波多野结衣精品久久| 水蜜桃在线视频| 精品久久国产精品| 五月婷婷久久久| 欧美日韩美少妇| 国产无遮挡又黄又爽又色| 久久久精品tv| 中国特级黄色片| 三级成人在线视频| 日本免费a视频| 欧美日韩在线二区| 99电影网电视剧在线观看| 人人鲁人人莫人人爱精品| 另类视频在线观看| 你懂的在线观看| 日韩欧美电影一区| japanese国产在线观看| 亚洲综合清纯丝袜自拍| 国产123在线| www.成人在线| av在线免费看片| 久久av最新网址| 日产精品久久久久久久蜜臀| 波多野结衣在线观看一区二区| 俄罗斯精品一区二区三区| 国产激情欧美| 人人做人人澡人人爽欧美| 超碰人人在线| 中文字幕国产亚洲| 天堂а√在线8种子蜜桃视频| 日韩一区二区在线播放| 国语对白做受69按摩| 五月天久久比比资源色| 少妇aaaaa| 国产精品久线观看视频| 欧美bbbbb性bbbbb视频| 成人一区二区三区视频| 涩多多在线观看| 久久精品72免费观看| 超碰影院在线观看| 亚洲看片免费| 免费在线看黄色片| 欧美日韩午夜| 欧美日韩一区二区三区电影| 欧美色网址大全| 欧美婷婷久久| 午夜精品影视国产一区在线麻豆| 91在线观看网站| 精品久久国产一区| 国产欧美日韩中文字幕| 国产一区二区三区影视| 国产精品69精品一区二区三区| 色一区二区三区| 91成人在线播放| 国产激情视频在线看| 午夜免费日韩视频| 大桥未久在线视频| 午夜精品一区二区三区在线视频 | 91精品啪aⅴ在线观看国产| 成人视屏在线观看| 国产精品白丝jk喷水视频一区| xxxxx性欧美特大| 日本三级久久久| 日韩免费电影| 国产精品美女在线| 成人黄色在线| 成人两性免费视频| 91麻豆精品一二三区在线| 国产欧美日韩精品丝袜高跟鞋| 国产成人毛片| 成人久久精品视频| 97se亚洲| 欧美福利精品| 菠萝蜜一区二区| 在线成人性视频| 女同性一区二区三区人了人一| 日韩中文在线字幕| 国产精品啊v在线| 免费在线观看亚洲视频| 视频在线观看一区| 亚洲综合日韩欧美| 国产精品综合久久| 男人的天堂影院| 久久九九国产精品| 蜜桃av.com| 亚洲国产精品视频| 影音先锋在线国产| 欧美日韩高清一区| 欧美一区二区黄片| 国产亚洲福利一区| 菠萝菠萝蜜在线视频免费观看 | 久久天堂av| 亚洲自拍av在线| 欧美人妖视频| 亚洲精品中文字幕在线 | 国产精品亚洲二区在线观看| 日本成人在线视频网站| 网站在线你懂的| 97精品国产露脸对白| 欧美性受xxxx黑人| 亚洲一区中文日韩| 国产精品熟女视频| 日韩一区二区三区在线观看| 少妇性bbb搡bbb爽爽爽欧美| 久久久久国产免费免费| 欧美日韩一区二区欧美激情 | 成人高清电影网站| 400部精品国偷自产在线观看| 亚洲午夜一级| 成人亚洲精品777777大片| 国产成人在线视频网站| 中文幕无线码中文字蜜桃| 日韩一区中文字幕| 国产做受高潮漫动| 51精品久久久久久久蜜臀| 午夜小视频免费| 久久影视电视剧免费网站清宫辞电视 | 亚洲欧美激情另类| 中文字幕日韩精品在线| 国产蜜臀在线| 国产日韩av在线播放| 九九热播视频在线精品6| 亚洲综合五月天| 国产精品入口66mio| 天堂网成人在线| 久久精品在线观看| xxxxxx国产| 欧美一级久久久| 成人18在线| 2019av中文字幕| 18国产精品| 自拍偷拍一区二区三区| 日韩国产精品久久| 喷水视频在线观看| 一区二区三区中文在线观看| 国产精品高清无码| 亚洲欧美一区二区三区四区| 成人爽a毛片免费啪啪动漫| 91麻豆国产语对白在线观看| jvid福利在线一区二区| 日韩精品一区二区三区色欲av| 成人在线综合网站| 超碰手机在线观看| 欧美日韩国产高清一区二区| 蜜桃免费在线| 欧美一区二区三区免费观看| silk一区二区三区精品视频| dy888午夜| 黄网站免费久久| 萌白酱视频在线| 欧美性生交片4| 高清中文字幕一区二区三区| 欧美一级视频免费在线观看| 成人精品动漫一区二区三区| 91成人综合网| 成人午夜电影小说| 久久精品国产亚洲AV无码男同| 日韩一区二区三区电影在线观看| 国内精品久久久久久野外| 国产在线观看一区二区三区| 91麻豆精品国产91久久久平台 | 波多野结衣视频一区| 久草成人在线视频| 欧美mv日韩mv亚洲| 欧美wwww| 高清视频在线观看一区| 黄页网站一区| 国产免费一区二区三区最新6| 午夜婷婷国产麻豆精品| 婷婷五月综合激情| 欧亚精品中文字幕| 中文字幕亚洲影视| 999精品视频在线| 国产精品免费视频一区| 91精品国自产| 九九热这里只有在线精品视| 一区二区在线免费播放| 日本午夜激情视频| 2019国产精品| 国产成人精品一区二区色戒| 精品国内自产拍在线观看| 亚洲精品影片| 免费一级特黄特色毛片久久看| 91在线播放网址| 中文字幕第三页| 欧美成人在线免费| 欧美理伦片在线播放| www.超碰com| 亚洲欧美一区二区三区极速播放| 亚洲av无码国产综合专区| 97精品久久久中文字幕免费| 国产一区不卡| 99中文字幕在线| 亚洲一区二区三区美女| 免费福利在线观看| 成人免费午夜电影| 最新成人av网站| 长河落日免费高清观看| 日韩午夜精品电影| 周于希免费高清在线观看| 亚洲精品二区| 成人久久久精品乱码一区二区三区| 久久久久女人精品毛片九一 | 漫画在线观看av| 亚洲欧美国产精品桃花| 成人激情校园春色| 在线观看国产区| 欧美激情久久久久久| 国产99久久久国产精品成人免费| 日本精品一区在线| 欧美性xxxx极品hd满灌| 天堂中文а√在线| 久久精品日产第一区二区三区精品版 | 91精品在线观看视频| 国产美女一区| 福利所第一导航|