[程式] Lua教程 : 第一個Lua程式
看板GameDesign (遊戲設計)作者StubbornLin (Victor)時間18年前 (2006/08/08 21:48)推噓0(0推 0噓 0→)留言0則, 0人參與討論串1/3 (看更多)
最近寫一個商業軟體,因為有用到Lua,所以趁機學學Lua然後寫寫教程,
而之前的小形線上遊戲部份,因為時間上太趕,架構規劃不夠好,
所以就先暫時擺著,等到有時間再來慢慢做,否則做出太爛的東西連我自己都受不了= =。
首先介紹到Lua
http://zh.wikipedia.org/wiki/Lua
這是維基百科的Lua介紹,因為Wow的巨集和User Interface的腳本語言,用的都是Lua
經過Wow的使用後,名聲更是響亮,相信大家應該有聽過,而它執行速度快
還可以編譯,可以用C擴充,使用上簡單等等很多優點讓它如此受歡迎,當然,它是免費的
這點更是重要 XD
而Lua的資源,最重要的當然就屬官方網站
Lua的官方網站 : http://www.lua.org
官方網站的Manual : http://www.lua.org/manual/5.1/
官方的Book Porgramming in Lua : http://www.lua.org/pil/
官方的Lua下載 : http://www.lua.org/download.html
其實要學Lua,上面的幾個網址就很夠用了,但是我希望能夠以比較直覺的方式
寫成比較入門的教程,因為我也正在學習,所以有錯的地方請指出來
Lua在遊戲中的應用範圍相當廣,因為它是嵌入式的語言,所以在遊戲中使用Lua
可以讓遊戲更加模組化,例如AI,就可以由Lua來撰寫,而讓使用者自行製做巨集
也可以使用Lua,劇情的部份,也可以交給Lua,網路連線處理的部份,也可以
交給Lua,總而言之,只要交給Lua的部份,都可以很輕易的模組化,可以說相當方便
如果要走火入魔一點,我有想過整個遊戲引擎就基於Lua之上也是可以XD
(如果有時間的話,來寫一個基於Lua的戀愛養成引擎,應該還蠻有趣的 XD)
嗯,知道了Lua是那麼好玩那麼有趣那麼有用的東西之後,廢話不多說
我們來看Lua的第一個程式,這個程式需要include一些檔案,和link lib
這些請自行到Lua官網尋找並編譯或安裝
///////////////////////////////////
#include <iostream>
extern "C"{
#include <stdio.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
}
int main (void) {
// 開啟Lua
lua_State *pLua = lua_open();
if(!pLua){
std::cerr << "Failed to open Lua"<< std::endl;
return EXIT_FAILURE;
}
// 啟動函式庫
luaopen_base(pLua);
luaopen_table(pLua);
luaopen_string(pLua);
luaopen_math(pLua);
luaopen_io(pLua);
int Result;
// 載入Lua檔
Result = luaL_loadfile(pLua,"hello.lua");
if(Result){
std::cerr << "Failed to load file"<< std::endl;
return EXIT_FAILURE;
}
// 執行整個Lua檔
Result =lua_pcall(pLua, 0, 0, 0);
if(Result){
std::cerr << "Failed to run lua"<< std::endl;
return EXIT_FAILURE;
}
lua_close(pLua);
return 0;
}
////////////////////////////////
-- This is my first lua programming
print("Hello world! Hello Lua!")
/////////////////////////////////
上面的部份是C++的主程式,下面的部份是hello.lua,注意到Lua的註解是
-- 後面的文字,而print是在畫面上印出東西來,Lua語言的行末不用加;
接著我們來看C++主程式,首先是include的部份,Lua因為是用純C語言寫的
因為我們必需告訴編譯器Lua的.h檔當做C來處理,因為純C寫的有個好處
就是幾乎什麼語言都可以使用,Lua除了可以在C使用外,好像也可以在其它
很多語言中使用,這也是優勢之一
接著是lua_open,也就是開啟一個Lua的Handle,接下來的操作都通過這個handle
// 啟動函式庫
luaopen_base(pLua);
luaopen_table(pLua);
luaopen_string(pLua);
luaopen_math(pLua);
luaopen_io(pLua);
而這些部份,是啟動Lua內建的函式庫,或許你會覺得很奇怪,為什麼不一開始
就把所有功能一次都啟動就好,這是因為,Lua通常是給使用者使用的,
你應該不會想看到使用者在你遊戲的巨集裡使用檔案IO去存去電腦裡的檔案
除此之外,一些沒有用到的功能你也可以選擇不去開啟它
然後是載入Lua檔,載入我們的第一個Lua程式,Hello.lua
// 執行整個Lua檔
Result =lua_pcall(pLua, 0, 0, 0);
if(Result){
std::cerr << "Failed to run lua"<< std::endl;
return EXIT_FAILURE;
}
而這個部份,使用lua_pcall後面填入三個0,讓Lua整個跑過一次,
這個函式主要是用來呼叫Lua的函式用的,如果你要呼叫某個
你在Lua程式裡定義的函數,先讓Lua執行過一次之後
Lua才會認識這些函式或全域變數之類的
lua_close(pLua);
最後,我們不再使用Lua Handle了,該是把資源釋放的時候了
第一個Lua程式就這樣完成了,其實並不會太難,只是技術文件不少= ="
看起來還蠻吃力的,還有Lua程式碼的寫法和其它語言不太一樣
所以剛開始寫會一直想打;在行末之類的 XD
以上,第一個教程結束了
--
VICTOR工作室 | PTT遊戲設計版隆重開幕!
| 不管是新手老手,程式美工音樂企劃....
URL : http://www.kinmen.info/vic/ | 都歡迎來遊戲設計版參與討論 XD
| 戰略高手>
C/C++ | GameTopics>
Visual Basic 6.0 | GameDesign
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.116.64.252
討論串 (同標題文章)
完整討論串 (本文為第 1 之 3 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章
15
19
22
32