六天学会写GA Lua脚本(一)
-
以下教程的接口和概念,均已GA为基础(GA商业版,GA免费版,two-click版),在其他引擎中可能会存在不兼容情况。
每一教程均已理论+实战的形式展示目录
(一)lua与GA的基础知识 实战I - 第一个lua程序,hello world
(二)GA的接口使用 实战II - 使用lua提示一级宠物
(三)Lua的流程控制语句 实战III - 使用lua实现原地登录 (取消)(改:lua与脚本交互 - 名字变色卡制作 )
(四)综合实战脚本I 实战IV - pk战自动匹配系统
(五)综合实战脚本II 实战V - lua与脚本交互 - 名字变色卡制作 (改:自动出售道具系统)
(六)综合实战脚本III 实战VI - 自动出售宠物系统阅读之前,必须对lua或者其他编程语言具有初步了解。
GA的基础知识
--对象(Object)--
玩家,NPC,怪物,道具等一类具有形态的东西,我们称为对象。--属性--
简单的来说,就是对象本身固有的状态。比如说,玩家的血值,怪物的位置,道具的耐久等。--方法--
用于主动对对象执行的函数,我们称为方法。例如:传送玩家,删除NPC,制作道具等,是lua脚本中最常用的一类函数。--事件(回调函数)--
事件的概念和方法相反,是对象被动执行的函数,我们称为事件。例如:在玩家被传送后,我们还需执行什么函数,道具丢地后,还需执行什么函数,这所执行的函数,我们称为事件,也可以称之为回调函数。实例一:当玩家登录游戏后,向自己发送公告,欢迎来到XX魔力!
分析:首先,我们需要向自己发送消息,必须使用公告方法,但在此之前,必须获得当前玩家对象,即使用登录事件。
这时我们可以用Delegate类来注册一个登录事件,以便于玩家在登录的时候,获取玩家对象。如下语句:
Delegate.RegDelLoginEvent("LoginEvent");
这句话的意思是,说明我们注册了一个名字为LoginEvent的登录事件,当玩家登录游戏的时候,这个LoginEvent事件就会被动执行。我们先写出LoginEvent事件的格式,如下:
function LoginEvent(player)
......
end
在事件函数内部,我们可以通过NLG.SystemMessage(player,message)方法来对当前的player对象,发送message信息。
完整的例子如下:
Delegate.RegDelLoginEvent("LoginEvent");
function LoginEvent(player)
NLG.SystemMessage(player,"欢迎来到XX魔力!");
end实例二:当玩家登录游戏后,向自己发送公告,欢迎某某某来到XX魔力!
首先,这个实例只是在前一个实例加上了玩家的名字,所以之前的思路一样,重点在于我们要怎么获取玩家的名字。这时,我们就应该使用到对象属性,在GA中,我们使用Char.GetData(player,index)方法来获取对象属性,完整实例如下:
Delegate.RegDelLoginEvent("LoginEvent");
function LoginEvent(player)
local name = Char.GetData(player,%对象_名字%);**
NLG.SystemMessage(player,"欢迎"..name.."来到XX魔力!");**
end
以上脚本中,我们还看到了一个local name,这是lua的变量声明格式,我们可以申请一个临时变量,来存储玩家的名字,接下来我们还看到 "欢迎"..name.."来到XX魔力!" 这里的双点,代表字符串连接符,用于把三个文本,连接文本一个文本,具体的lua语言语法,请自行搜索百度,以下将不再重点讲解。练习:当玩家登录游戏后,向全体玩家发送公告,欢迎某某某来到XX魔力!
答案第二章公开。lua的基础知识
--全局变量和局部变量,作用域--
lua中全局变量无需任何修饰声明,直接建立变量名即可使用,局部变量则需要在变量名前加local
例子:
NAME = "blue"; -- 全局变量
local NANE = "blue"; --局部变量
全局变量在任何地方的代码均可以访问,局部变量则有作用域,作用域的范围是外包含内,例如
local a = 2;
local b;
if a >1 then
b = 1;end
a = b;
以上为正确的写法。
local a = 2;
if a >1 then
local b = 1;end
a = b;以上为错误的写法。
多层嵌套作用域会在第三章详细解释。
--表(table)--
lua中,表的作用很常用,lua中的表可以当做数组,哈希表等数据结构使用,例:
数组:
local a = {[1]="a",[2]="b",[3]="C"};
值得注意的是,lua与大部分编程语言不同,下标是从1开始的。哈希表:
local a = {};
a = 1;
a["free"] = 1;
在lua中,表可以嵌套使用,例如
local a = {};
local b ={};
b[0] = 1;
b[1] = 1;
a = b;
值得注意的是,使用table作为哈希表时,数据并不会被垃圾回收器回收,必须在合适的时间内,手动回收数据,如下:
a = nil;
-
WOW~~~好詳細,第一次看懂LUA
-
blue的luaFrame框架,当年让我震撼了好几天了,大家好好跟blue大神学习了
-
~~前排膜拜大神~!!!~~看看再
-
不懂编程的 看懂了- -
-
第二章不太明白,数组和哈希表有详细的解释吗,学习中......
-
受益匪浅
-
我来学习学习下