我們知道指令碼語言是解除硬編碼,防止重編譯的利器,可以這樣說,任何大型遊戲都有自己的指令碼系統。
想要做出一款精品遊戲,指令碼語言也是我們需要掌握和運用的。
較流行的指令碼語言有python,lua,ruby等。
lua有著輕量,高效,介面乾淨等特點,學起來很快,
風靡全球的《魔獸爭霸3:冰封王座》就是採用的lua指令碼語言。
我將內容進行了排版,**進行了高亮顯示,更方便大家**了。
當你希望在你的遊戲開始的時候讀取一些資訊,以配置你的遊戲,這些資訊通常都是放到乙個文字檔案中,在你的遊戲啟動的時候,你需要開啟這個檔案,然後解析字串,找到所需要的資訊。
是的,或許你認為這樣就足夠了,為什麼還要使用lua呢?
應用於「配置」這個目的,lua提供給你更為強大,也更為靈活的表達方式,在上一種方式中,你無法根據某些條件來配置你的遊戲,lua提供給你靈活的表達方式,你可以類似於這樣來配置你的遊戲:
if player:is_dead() then
do_something()
else
do_else()
end
更為重要的是,在你做了一些修改之後,完全不需要重新編譯你的遊戲**。
通常,在遊戲中你並不需要乙個單獨的直譯器,你需要在遊戲來執行直譯器,下面,讓我們來看看,如何在你的**中執行直譯器:
//這是lua所需的三個標頭檔案
//當然,你需要鏈結到正確的lib
extern "c"
int main(int argc, char *argv)
程式輸出:hello, world!
有時你需要執行一段字串,有時你可能需要執行乙個檔案,當你需要執行乙個檔案時,你可以這麼做:
lua_dofile(l, "test.lua");
看,非常簡單吧。
取得資訊
下面讓我們來看看如何從指令碼中取得我們所需要的資訊。
首先,讓我來簡單的解釋一下lua直譯器的工作機制,lua直譯器自身維護乙個執行時棧,通過這個執行時棧,lua直譯器向主機程式傳遞引數,所以我們可以這樣來得到乙個指令碼變數的值:
lua_pushstring(l, "var"); //將變數的名字放入棧
lua_gettatbl(l, lua_globalsindex);變數的值現在棧頂
假設你在指令碼中有乙個變數 var = 100
你可以這樣來得到這個變數值:
int var = lua_tonumber(l, -1);
怎麼樣,是不是很簡單?
lua定義了乙個巨集讓你簡單的取得乙個變數的值:
lua_getglobal(l, name)
我們可以這樣來取得乙個變數的值:
lua_getglobal(l, "var"); //變數的值現在棧頂
int var = lua_tonumber(l, -1);
完整的測試**如下:
#include "lua.h"
#inculde "lauxlib.h"
#include "lualib.h"
int main(int argc, char *argv)
呼叫函式
假設你在指令碼中定義了乙個函式:
function main(number)
number = number + 1
return number
end
在你的遊戲**中,你希望在某個時刻呼叫這個函式取得它的返回值。
在lua中,函式等同於變數,所以你可以這樣來取得這個函式:
lua_getglobal(l, "main");//函式現在棧頂
現在,我們可以呼叫這個函式,並傳遞給它正確的引數:
lua_pushnumber(l, 100); //將引數壓棧
lua_pcall(l, 1, 1, 0); //呼叫函式,有乙個引數,乙個返回值
//返回值現在棧頂
int result = lua_tonumber(l, -1);
result 就是函式的返回值
完整的測試**如下:
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
int main(int argc, char *argv)
指令碼呼叫程式
lua本身定位在一種輕量級的,靈活的,可擴充的指令碼語言,這意味著你可以自由的擴充lua,為你自己的遊戲量身定做乙個指令碼語言。
你可以在主機程式中向指令碼提供你自定的api,供指令碼呼叫。
lua定義了一種型別:lua_cfunction,這是乙個函式指標,它的原型是:
typedef int (*lua_cfunction) (lua_state *l);
這意味著只有這種型別的函式才能向lua註冊。
首先,我們定義乙個函式
int foo(lua_state *l)
我們可以在指令碼中這樣呼叫這個函式
r1, r2 = foo("hello")
print(r1..r2)
完整的測試**如下:
extern "c"
int foo(lua_state *l)
int main(int argc, char *argv)
程式輸出:
hello
100200
遊戲中使用LUA指令碼語言的簡介
我們知道指令碼語言是解除硬編碼,防止重編譯的利器,可以這樣說,任何大型遊戲都有自己的指令碼系統。想要做出一款精品遊戲,指令碼語言也是我們需要掌握和運用的。較流行的指令碼語言有python,lua,ruby等。lua有著輕量,高效,介面乾淨等特點,學起來很快,風靡全球的 魔獸爭霸3 冰封王座 就是採用...
在遊戲中如何使用LUA指令碼語言
當你希望在你的遊戲開始的時候讀取一些資訊,以配置你的遊戲,這些資訊通常都是放到乙個文字檔案中,在你的遊戲啟動的時候,你需要開啟這個檔案,然後解析字串,找到所需要的資訊。是的,或許你認為這樣就足夠了,為什麼還要使用lua呢?if player is dead then do something els...
Lua遊戲指令碼語言入門(一)
lua 的語法比較簡單,學習起來也比較省力,但功能卻並不弱。在lua中,一切都是變數,除了關鍵字。請記住這句話。前言.開發環境搭建 lua執行器 i.首先是注釋 寫乙個程式,總是少不了注釋的。在lua中,你可以使用單行注釋和多行注釋。單行注釋中,連續兩個減號 表示注釋的開始,一直延續到行末為止。相當...