作者StubbornLin (Victor)
看板GameDesign
标题[程式] Lua教程 : 第一个Lua程式
时间Tue Aug 8 22:40:19 2006
最近写一个商业软体,因为有用到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