GameDesign 板


LINE

最近写一个商业软体,因为有用到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







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP