| lingo 教程 |
|
| 作者:未知 文章来源:本站原创 点击数: 更新时间:2005-11-27 |
|
|
。Lingo基本概念
l Lingo简介
Lingo是Director中的描述式语言,使用Lingo可以增加movie的互动性,如跳到不同的movie、使用鼠标与键盘的回馈、输入信息、移动对象、按按钮、播放音效、控制影片播放等等。
Lingo的语法就像Basic一样简单,也有一般程序语言的变量、函数、判断、循环等基本概念。而在Director的Help中也附了一本最方便的Lingo字典:Using Lingo(Help>Lingo Dictionary)。
l 术语简介
¨ Command(指令)
Ø 使Director去做某些动作的命令,如go可跳到指定的frame或movie。
¨ Function(函数)
Ø 根据呼叫函数时所传入参数(或不传入),会传回一个值,如date()传回今天日期、max(a, b)会传回a与b中的最大值。
¨ Handler(处理函数)
Ø movie在播放时会产生一些事件(Event),Handler是用来接收并处理这些事件的,如以下程序代码(其中on mouseUp ... end即是一个Handler),当鼠标click后,便让系统「哔」一声。
on mouseUp
beep
end
Ø 使用者可以自订处理函数,将有用的程序代码集合起来重复利用。
¨ Event(事件)
Ø movie在播放时会产生的事件,如movie开始或停止时、鼠标按下时、键盘按下时,都会有事件产生。
¨ Variable(变数)
Ø 变量是用来储存数值、字符串、symbol、list、对象的,可以用等号(=)去指定一个变量,如以下的程序代码就是将myVar的值设为15
myVar = 15
¨ Constant(常数)
Ø Director内定的一些固定值,使用者无法改变其值,如TAB、EMPTY、RETURN等。
¨ Keyword(关键词)
Ø 具有特殊意义的保留字,自订变量不可用Keyword的字作为变量名称。如end表Handler的结尾。
¨ Operator(运算符号)
Ø 将一个或以上的值计算出新的值出来。如加减乘除分别为+、-、*、/。
¨ Property(属性)
Ø 对象都会有些属性,如sprite有blend、visible等属性。
l Script的种类
¨ behavior(行为)
Ø 可细分为sprite behavior及frame behavior,附加(attach)在sprite上的称sprite behavior,而放在score中script channel的称frame behavior。
Ø 一个behavior可附加在多个sprite上,达到重复利用的特性,只要编辑此behavior,则同时会影响所有附加此behavior的sprite。
¨ movie script
Ø movie script对目前的整个movie都有作用,不论在哪个frame或在哪个sprite,都可以呼叫movie script中的处理函数。
Ø movie script能处理movie开始、结束播放时的事件,常用于程序的初始化以及结束时释放资源。
Ø 如果是共享的自订处理函数,可以放在movie script中供所有程序使用。
Ø movie script可处理整个movie的键盘、鼠标事件,不过通常还是由behavior来处理比较适合、比较好管理。
¨ parent script
Ø 用于OOP(对象导向程序设计)的script,过于进阶,在此不详述。
¨ cast member script
Ø 直接附加在cast member上的script。因为管理不易、重复利用度不高,一般较少用。
l 变量可见范围
¨ 全域变数
Ø 用global将变量宣告成全域变量,可让其它地方使用此一变量,如下程序代码。若一次宣告二个以上的变量,则用逗点(,)隔开即可。
global gUserName
global gGameLevel, gSize
Ø 二个不同的script中若都要用到某全域变数,则二个script中都要以global来宣告。
Ø 在全域变数的命名上,习惯会将变量名称最前面加上一个g,以便区别,如userName→gUserName、size→gSize(非必须,但建议)。
¨ 属性变量
Ø 仅能用在behavior或parent script
Ø 用property将变量宣告成属性变量,可让该script中任何handler使用此一变量,如下程序代码。若一次宣告二个以上的变量,则用逗点(,)隔开即可。
property pIdNum
property pName, pIsLock
Ø 在属性变量的命名上,习惯会将变量名称最前面加上一个p,以便区别,如idNum→pIdNum、name→pName(非必须,但建议)。
¨ 区域变量
Ø 不特别指定成全域变量或属性变量者,即为区域变量,其值只在定义此变量的区块中有效;出了此区块,变数便会消失,不会记录。
l 各种数据型态的表达
¨ 字符串
Ø 用双引号括起来的即为字符串,如 "中英皆可, nice!" 即是一段字符串。
¨ 整数
Ø 不含小数的数值为整数,整数范围介于-2,147,483,648~+2,147,483,647间,另外可以用integer()函数将浮点数转成整数。
¨ 浮点数
Ø 含小数的数值为浮点数,可以用float()函数将整数转成浮点数。
¨ symbol(符号)
Ø 乃是供使用者自订之常数,须以井字号开头,如:#myName、#color等。
Ø 符号和字符串类似,但比字符串执行更有效率。
¨ 常数
Ø Director内定的一些固定值,使用者无法改变其值,如TRUE、FALSE、VOID、EMPTY、BACKSPACE、ENTER、QUOTE、RETURN、SPACE、TAB等皆为常数。
¨ cast member
Ø 在程序中常会要指定某个cast member,如一个名为"ball"的cast member,在名为"toy"的cast中,指定的方式即为member("ball", "toy")。注意,如果在该cast中有二个以上的cast member皆命名为"ball"时,Director会采用编号较小的那一个,故每个cast member命名最好都不一样。
Ø 如果省略cast的名称亦可,如上例可改成member("ball"),不过Director会由第一个cast搜寻到最后一个cast,采用第一个找到、且命名为"ball"的cast member。
¨ sprite
Ø sprite(1)指第1个channel的sprite,sprite(2)指第2个channel的sprite,以此类推。
l 运算符号
运算符号主要是将数据作运算、结合、比较、修饰等,种类如下:
¨ 数学算符
Ø 加(+)、减(-)、乘(*)、除(/),和数学计算规则相同,由左至右计算,先乘除后加减。
Ø 另有求余数(mod)算符,如12 mod 5的结果会为2
Ø 用一组小括号( )可以将包围起来的算式优先计算,如下程序代码:
--以下结果为14
result = 2 + 4 * 3
--以下结果为18
result = (2 + 4) * 3
¨ 比较算符
Ø 等于(=)、不等于(<>)、小于(<)、小于等于(<=)、大于(>)、大于等于(>=)
Ø 用于比较数值、字符串的大小或是否相等,结果为TRUE(真)或FALSE(假)
¨ 逻辑算符
Ø and:二者皆为TRUE时,结果才为TRUE,否则结果为FALSE。
Ø or:二者其中一者为TRUE或二者皆为TRUE时,结果才为TRUE,否则结果为FALSE。
Ø not:若原本的值是TRUE,结果即为FALSE;若原本的值是FALSE,结果即为TRUE。
¨ 字符串算符
Ø ":标明字符串的起点和终点,如 "中英皆可, nice!" 即是一段字符串。
Ø &:连结二段字符串
Ø &&:连结二段字符串,并在二段字符串间多加上一格空格符。
l 语法
¨ 啰嗦语法(verbose syntax)与点语法(dot syntax)
Ø 早期Lingo采用「啰嗦语法」,语法接近英文文法,缺点是太啰嗦,遇到太复杂的程序时会很难维护。从Director 7.0之后Lingo加入了「点语法」,让程序代码变得更简明清楚。目前是二种语法皆支持,建议以「点语法」来撰写程序。以下程序代码分别用二种语法撰写,皆为将sprite 1的cast member名称设为"ball"。
--啰嗦语法
set the name of the member of sprite 1 to "ball"
--点语法
sprite(1).member.name = "ball"
¨ 空格符
Ø Lingo使用空格符分隔程序中的每个字,而多余的空格符会被程序忽略而不会造成任何影响,所以可以利用空格符来对齐程序代码,让它看起来易读些。
¨ 大小写
Ø Lingo不分大小写,若一个变量写成username或UserName都会被视为同一个变量。不过,养成一个良好的习惯:将不同地方的变量大小写固定一种写法,对程序代码阅读与维护都是有帮助的。
¨ 批注
Ø 只要程序代码前面加上二个短横线(--),该符号后的文字便为批注,程序不会去执行。如以下程序代码。
--这是一段批注,这段不会被执行
result = a + b *5 --写在这里也算是批注
Ø 批注主要用途是为程序加注说明,即使是自己写的程序,一段时间后也会忘记原始在写程序时的架构,所以为你的程序写批注是一定要的。
Ø 有时写程序时遇到bug或想暂时把某些程序功能关起时,也可以用批注的方式,暂时让程序不会去执行到某段程序代码。
¨ 简写
Ø Lingo有些指令中,部分字可以省略,如go to frame 10可以简写成go frame 10,甚至可写成go 10。
l 程序流向控制
一般程序代码会从上往下一行一行执行,如果使用if、case、repeat等条件或循环可让程序的流向作改变。
¨ 条件判断
Ø 使用if
--如果...就...
if x > 10 then
go frame 30
end if
--如果...就...否则...
if y < 5 then
put "y小于5"
else
put "y不小于5"
end if
--多层「如果...就...否则...」
if z = 1 then
put "z为1"
else if z = 2 then
put "z为2"
else if z = 3 then
put "z为3"
else
put "其它的情况"
end if
Ø 使用case。以下程序代码为判断按下的按键为何:
case (the key) of
"A":
put "使用者按了A"
"B", "C":
put "使用者按了B或C "
otherwise:
put "其它的情况"
end case
¨ 循环
Ø 使用repeat
-- |