亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Lua教程(一):在C++中嵌入Lua腳本

2024-07-21 23:04:05
字體:
來源:轉載
供稿:網友

本系列教程主要介紹如何在C/C++程序里面嵌入Lua腳本,我打算從以下幾個方面來介紹:

1.如何在C/C++里面嵌入Lua腳本

2.Lua訪問C/C++數據結構(這里面要介紹類,結構體,函數,變量,枚舉等數據類型在lua里面如何訪問)

3.C/C++訪問Lua的數據,主要是基本數據類型,函數和Table

4.Cocos2D-X里面的Lua綁定(含自動綁定與手動綁定)

5.Cocos2D-x里面Lua和C/C++相互調用

6.Cocos2D-x里面Lua和Java相互調用

7.Cocos2D-x里面Lua和Objective-C相互調用

本系列教程不會過多地介紹Lua的基本語法,關于Lua基本語法的學習,推薦《Programming In Lua》。 如有紕漏,歡迎指出,謝謝。

另外,關于更新時間,每周一篇,定期或者不定期,呵呵。

Mac項目集成Lua

準備工作

首先,新建一個控制臺應用程序。 打開Xcode,New->Project->OSX->Command Line Tool,取名為Lesson01如下圖所示:

Lua教程,C++,Lua腳本

接下來,我們需要下載lua5.2.3.下載完后,解壓縮,然后cd到剛剛解壓縮的路徑下面,輸入make macosx,這樣便可以生成Mac下面的lib文件。

接下來把剛剛解壓縮的文件夾拷貝到你新建的工程下面,然后設置include路徑和library路徑。(注意,這里是不需要把頭文件添加到Xcode里面的,只要指定include路徑,編譯的時候,編譯器會自動去找的。)

Lua教程,C++,Lua腳本

因為我的Lua文件夾的路徑是:xxxx/Lesson01/lua-5.2.3,所以,我把search path和library path分別設置為:

 

復制代碼 代碼如下:

//search path
$(SRCROOT)/Lesson01/lua-5.2.3/src/
//library path
$(PROJECT_DIR)/Lesson01

 

下面是我的工程與lua之間的目錄結構,liblua.a文件是從src里面拷貝出來的。(前面我們使用make macosx生成出來的)

Lua教程,C++,Lua腳本

注意:如果直接添加lua的所有源碼,則會編譯報錯。因為lua.c里面也有一個main函數。這個main函數是用來生成可執行程序的。 另外,如果是添加其它第三方的庫,也可以參考這個方法,添加search path和library path

C++調用Lua文件

首先,打開main.cpp,并包含以下頭文件:

復制代碼 代碼如下:

#include "lua.hpp"

 

如果此時編譯不報錯,則說明你之前設置的search path是正確的,如果報錯,請自行調整search path。

這里面的lua.hpp的內容如下:

復制代碼 代碼如下:

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

 

這才是大多數Lua教程里的代碼嘛。然后在main函數里面添加以下內容:

 

復制代碼 代碼如下:

/1. 初始化Lua虛擬機
lua_State *lua_state;
lua_state = luaL_newstate();
//2.設置待注冊的Lua標準庫,這個庫是給你的Lua腳本用的
//因為接下來我們只想在Lua腳本里面輸出hello world,所以只引入基本庫就可以了
static const luaL_Reg lualibs[] =
{
    { "base", luaopen_base },
    { NULL, NULL}
};
//3.注冊Lua標準庫并清空棧
const luaL_Reg *lib = lualibs;
for(; lib->func != NULL; lib++)
{
    luaL_requiref(lua_state, lib->name, lib->func, 1);
    lua_pop(lua_state, 1);
}
//4、運行hello.lua腳本
luaL_dofile(lua_state, "hello.lua");
//5. 關閉Lua虛擬機
lua_close(lua_state);

 

新建Lua文件

選擇New->File->Other,然后命名為hello.lua, 以下是hello.lua里面的內容:

復制代碼 代碼如下:

print "Hello World"

 

編譯并運行

此時編譯并運行,這時可能看不到控制臺輸出”Hello World”。因為你的Lua腳本沒有拷貝到程序里面去,我們需要再設置一下。如下圖所示: (注意:subpath要清空,copy only when installing去掉打勾)

Lua教程,C++,Lua腳本

這時,編譯并運行,你會得到如下結果 :

Lua教程,C++,Lua腳本

接下來,我們講講IOS項目怎么集成Lua。

IOS項目集成Lua

IOS項目集成Lua的方式與Mac大同小異,順便補充一句,Lua本質上是一個c程序,任何平臺下面集成相應c庫的方法都是適用的。

這里我主要寫一些注意事項吧:

1.我們剛才編譯好的macosx庫只能給mac程序用,ios需要單獨編譯(當然,windows和linux也需要再單獨編譯,編譯方法見下載的lua-5.2.3/doc/readme.html)

2.編譯ios可以通過添加一個static library,然后把所有的Lua文件添加到這個Library里面。最后,讓主項目依賴這個Library就可以了。

3.直接使用luaL_dofile(lua_state, “hello.lua”)是行不通的,因為ios項目的資源路徑在一個沙盒里。我們必須取得全路徑才可以訪問到這個hello.lua文件。以cocos2d-x為例,我們可以使用下面的代碼獲得hello.lua的全路徑,然后再傳遞給Lua虛擬機。

 

復制代碼 代碼如下:

  std::string scriptPath = FileUtils::getInstance()->fullPathForFilename("hello.lua");
    int status = luaL_loadfile(lua_state, scriptPath.c_str());

 

Android項目集成Lua

Android集成Lua需要使用Android.mk把Lua打包成一個靜態庫,然后在項目里面包含這個Lua模塊。具體的做法可以參考cocos2d-x。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲欧美日韩高清| 国产精品极品美女粉嫩高清在线| 日韩高清电影好看的电视剧电影| 久久久久久久久久婷婷| 久久综合亚洲社区| 亚洲人成电影在线| 国产亚洲精品久久久优势| 国产精品第一页在线| 欧美激情精品久久久久久免费印度| 久久久精品一区二区| 久久精品视频在线播放| 亚洲欧美在线磁力| 日韩欧美在线视频观看| 日韩电影免费观看中文字幕| 国产精品成人久久久久| 欧美成人精品一区二区三区| 91在线中文字幕| 色综合久久久久久中文网| 欧美激情久久久久久| 日韩资源在线观看| xxxx性欧美| 久久久久久久久久国产| 中文字幕欧美专区| 国产精品自拍偷拍视频| 日本一区二区三区四区视频| 亚洲自拍偷拍视频| 日韩欧美在线网址| 亚洲中国色老太| 国产在线一区二区三区| 中日韩美女免费视频网址在线观看| 久久成年人免费电影| 亚洲视频在线观看| 精品国产一区二区三区久久狼黑人| 国产91在线播放| 亚洲精品永久免费精品| 日韩av免费在线| 国产成人亚洲综合青青| 高跟丝袜欧美一区| 亚洲欧美成人网| 国产欧美最新羞羞视频在线观看| 欧美日韩免费在线观看| 欧美xxxwww| 高清欧美性猛交| 国产精品一区二区三区成人| 欧美在线亚洲一区| 亚洲精品美女网站| 欧美亚洲在线观看| 国产精品入口免费视| 日韩在线观看视频免费| 欧美另类69精品久久久久9999| 日韩欧美亚洲成人| 国产精品爱啪在线线免费观看| 久久久97精品| 久久成人精品视频| 亚洲国产成人精品久久久国产成人一区| 日韩精品在线视频| 精品久久久久久久久久ntr影视| 精品国产区一区二区三区在线观看| 91香蕉嫩草影院入口| 欧美日韩久久久久| 欧美与欧洲交xxxx免费观看| 国产不卡一区二区在线播放| 亚洲国产精品va| 北条麻妃在线一区二区| 色琪琪综合男人的天堂aⅴ视频| 国产啪精品视频网站| 91久久精品在线| 欧美www在线| 日韩色av导航| 欧美xxxx综合视频| 久久久久久久999精品视频| 日本人成精品视频在线| 欧美精品videofree1080p| 色综合久久悠悠| 欧美日韩国产一区二区三区| 久久久亚洲影院| 亚洲国产高清高潮精品美女| 国外成人在线视频| 成人在线一区二区| 亚洲最大中文字幕| 日韩av在线电影网| 久久成人精品电影| 91视频88av| 亚洲人成毛片在线播放| 久久久91精品国产| 91精品国产777在线观看| 中文字幕欧美专区| 亚洲免费高清视频| 欧美xxxx18国产| 超薄丝袜一区二区| 亚洲精品网址在线观看| 日韩电影中文字幕在线观看| 国产91精品最新在线播放| 最近更新的2019中文字幕| 最新69国产成人精品视频免费| 成人免费福利在线| 色爱av美腿丝袜综合粉嫩av| 欧美色视频日本高清在线观看| 欧美怡春院一区二区三区| 日韩欧美国产中文字幕| 亚洲夜晚福利在线观看| 最新91在线视频| 亚洲www在线| 久久亚洲精品小早川怜子66| 亚洲精品日韩激情在线电影| 亚洲精品成人久久| 国产精品va在线播放| 亚洲精品乱码久久久久久金桔影视| 欧美激情一区二区三区久久久| 在线精品91av| 久久不射电影网| 性欧美办公室18xxxxhd| 日韩美女福利视频| 日韩美女免费线视频| 精品一区精品二区| 神马久久久久久| 亚洲jizzjizz日本少妇| 久久这里有精品视频| 精品视频—区二区三区免费| 久久视频在线免费观看| 福利一区福利二区微拍刺激| 欧美亚洲另类视频| 91在线精品播放| 91免费观看网站| 不卡伊人av在线播放| 韩剧1988免费观看全集| 日韩在线观看免费高清完整版| 日韩欧美国产视频| 7777精品久久久久久| 欧美亚洲激情视频| 久久精品99久久香蕉国产色戒| 97激碰免费视频| 欧美成人免费全部观看天天性色| 91精品久久久久久综合乱菊| 伊人精品在线观看| 欧美性猛交丰臀xxxxx网站| 国产丝袜高跟一区| 欧美在线xxx| 欧美男插女视频| 成人a级免费视频| 91精品视频网站| 亚洲图片在区色| 久久国产精品久久久| 亚洲第一精品夜夜躁人人躁| 日韩精品极品在线观看| 狠狠躁18三区二区一区| 日本欧美国产在线| 国产成人一区二区在线| 国产精品久久精品| 欧美激情视频播放| 久久综合伊人77777尤物| 亚洲免费视频一区二区| 海角国产乱辈乱精品视频| 国产精品第七十二页| 国产成人精品网站| 亚洲2020天天堂在线观看| 欧美黑人xxx| 欧美国产一区二区三区| 九九热这里只有在线精品视| 51精品在线观看| 亚洲国产精品人久久电影| 国产精品久久久久久久美男| 91免费福利视频| 青草成人免费视频|