LINGO编程篇.docx
《LINGO编程篇.docx》由会员分享,可在线阅读,更多相关《LINGO编程篇.docx(47页珍藏版)》请在冰豆网上搜索。
LINGO编程篇
LINGO编程术语
命令:
当影片在播放的时候,告诉director要做的事情。
例子:
beep 让director发出beep声音.
go 让director跳转到指定的帧或标记处.
注释:
对语句的功能作说明。
注释时用双破折号(--)。
在定义全局变量前写上注释说明以便清楚这个变量,这是个很好的编程方法。
例子
--hiScore记录在游戏上最高得分
globalhiScore
条件语句:
允许你测试条件的对错并基于这些条件执行命令的语句。
例子:
ifsoundBusy
(1)thengotheframe
如果条件成立就执行后面的语句
常量:
值保持不变量
例子:
FALSE,EMPTY
member
(1).text="empty”将member
(1)中的文字改成empty
member
(1).text=EMPTY 清空member
(1)中的文字信息
事件:
影片播放时在特定条件下发生.
例子:
exitFrame 当播放头离开某一帧时
mouseUp 当鼠标从按钮上弹起时
表达式:
由操作数和运算符组成.
例子 1+1.
函数/方法:
能够执行特定功能的语句块,通常由对象声明的。
例子:
thetime 返回当前的时间
thenameofmember 返回演员的名子
thekey 返回最后按下的按键.
一个函数(或顶级函数)可以命令运行中的影片做一些事情,在函数名后面通常用括号结束。
例子:
调用顶级列表的语法 list().
处理程序:
作为一个将要执行的代码单元的lingo语句组合,以on关键字开始,当一个事件发生时,事件处理程序作为一个执行的代码单元。
例子:
onmouseUp
on enterFrame
关键字:
lingo中的专有名词。
例子:
the,cast,field,end
列表:
一种特别的变量类型,可以由多种不同的数据类型的数据组合在一起。
有2种类型的列表:
线性列表:
是一系列的单值序列.每一项是一个独立的数据单元,以逗号分开。
e.g. ["value1","value2","value3"]
属性列表:
每一项包含2个单元数据,以(:
)分隔一项中的2个单元数据,[属性名:
属性值]。
e.g. ["Jack":
95,"Jill":
50,"Peter":
65,"Sarah":
75]
循环语句:
当给定的条件为真或给出指定的次数时,不断执行一段脚本。
例子1
repeatwhilethemouseDown
nothing
endrepeat
例子2
repeatwithx=1to10
sprite(x).visible=1
endrepeat
退出一个循环时使用:
exitrepeat.
消息:
一个事件发生时,消息也随之被director抛出,消息和事件是同时发生的。
例子,当播放头进入某一帧时,enterFrame 事件发生,同时director产生一个 enterFrame 消息。
如果一个脚本包含 onenterFrame 处理程序,处理程序中的语句将会执行,因为处理程序接收了enterFrame 消息。
方法:
当影片在播放时命令影片做一些事情或返回一个值,从一个对象处调用。
例子:
sound
(1).isBusy(),是一个声音通道方法,用于判断声音通道1是否有声音在播放.它类似一个函数,但总是从一个对象调用。
面向过程的编程:
一种以过程为中心的编程思想,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现。
面向对象的编程(OOP):
一种编程思想,将数据和程序(指令)组织到对象中,Lingo是一种OOP语言。
对象:
脚本单元,被设计成即可接收输入也可以产生一个结果。
每一个事件处理程序都是一个对象,因为它输出了(一个事件的消息)并且做了一些事情。
操作符:
一个字符或单词(操作符),作用于一个或多个元素(操作数).可用于四则计算(+,-,/,*),或者为变量赋值(=,to,into)或者用于比较 (<,>,=,<>)
例子:
x = 10
put10 into x
逻辑操作符:
:
连接两个布尔值并产生一个布尔类型的结果。
一个布尔值可以是TRUE (=1)或者是 FALSE (=0)。
在Lingo中,正整数和负整数都是TRUE,0是 FALSE。
逻辑操作符包括AND,OR,NOT.
链接操作符:
用于连接字符串,包括:
& ,&&.
&& 用一个空格连接2个字符串。
例子:
put"dean"&&"utian"--"deanutian"
参数:
给出一个指令(函数的另一种写法)或函数执行的依据。
形式参数与实际参数区分。
用于添加处理程序或行为或函数的灵活性。
例子:
�
go[whichframe]参数值传递给参数
例子:
onexitFrameme
sprite(me.spriteNum).locH=themouseH --使精灵水平位置跟随鼠标的水平位置
end
me是一个参数,当它和spriteNum放在一起的时候,得到使用此行为的精灵编号。
当调用一个处理程序的时候,参数将被替换。
例子
oncalcVolumevalue1,value2,value3
putvalue1*value2*value3
end
在消息窗口中输入如下类型的语句:
calcVolume2,2,3
--12
属性:
由对象定义。
精灵,演员,甚至行为都有属性。
也有顶级属性,不依赖于对象。
例子, colorDepth 是位图演员的属性,可以使用属性变量设置脚本中的属性。
语句:
可执行的单行Lingo内容.
符号:
在变量名前面加上#号,使用符号通常可以快速执行,提供更高效的代码。
例子,userLevel=#beginner --运行速度快
userLevel="beginner"
符号不能包含空格或标点,使用symbol() 方法,可以将字符串转换成符号,使用string() 方法,可以再次转换回字符串。
例子
x=symbol("beginner")
putx
--#novice
x=string(#beginner)
putx
--"beginner"
变量:
存储数据的容器,变量存在于内存中,
变量的命名规则
只能是字母、数字或下划线的组合,不能以数字开头。
变量的类型:
整型integers:
e.g. 1,-5
浮点型floats:
带有小数点e.g. 1.5,-0.89
字符串strings:
加上引号的文本e.g. "dean","Multimediadesign"
符号symbols:
e.g. #dean,#123
布尔型boleans:
e.g. TRUE or FALSE, 1 or 0
列表lists:
一次存放多个数据单元,这些数据单元可以是整数,浮点数,字符串,符号,或一个列表.e.g. [1,2,3],["abc",1.2,#name]
局部变量Localvariables –保存的数据只能用于当前的处理程序.
全局变量Globalvariables -保存的数据可以用于声明(用关键字global声明)的此变量的任何地方.
属性变量Propertyvariables -保存的数据仅为特定对象使用,(用关键字property声明)。
为变量赋值:
putvalueintovariable
setvariabletovalue
variable=value--现在多用这种写法
学习lingo编程
市场上有许多书,声称可以在一天甚至几个小时内学会一门编程语言。
在几小时或几天内学会lingo(或其他编程语言)的想法是有误导性和不切实际的,尤其是如果你没有任何其他编程语言的经验。
电脑是非常愚蠢的,你告诉它们什么,它们就做什么。
编程是与计算机沟通的一种方式。
学习程序不仅限于学习编程语言的“单词”和“语法”,它涉及到学习的思维方式,这是非常不同的传统自然的思考,这必须通过大量的实践和经验才能获得。
在这里我准备要做的是通过介绍两种编程方式带你进入编程世界。
编程思想
面向过程的编程 :
写代码(指令集合)的一种方式,告诉计算机按部就班地做。
例子:
一个过程式的程序或许要求计算机读取一个数字,再乘以6,接着显示结果,指令按他们给出的顺序被激活。
BASIC,Pascal,CandFORTRAN这些编程语言都是面向过程的。
过程式编程对小型项目有好处,这是以最自然的方式告诉计算机要做的事,CPU直接处理的语言----机器语言也是面向过程的。
因此,将过程式的高级语言翻译成机器语言是简单高效的。
面向对象的编程 ( OOP),这是另一种编程方式,程序中的代码被分解成独立的单元,每个单元执行单一的功能.当需要这个函数时,应用程序通过发送一个流信息(称为消息)调用这个对象。
像C++andJava,Lingo也是一种OOP语言。
将代码分离成离散的单元使程序更容易组织,管理,重用和修改同时也提高了编写代码的效率。
Director中的编程语言
随着DirectorMX2004的发布,director现在支持 Lingo 和 JavaScriptSyntax.JavaScript语言从业程序员较多,它更接近其他常见的编程语言。
用Lingo或JavaScript写程序的原则是相同的,选用哪一种编程语言取决于你对它的熟悉程度。
建议选择lingo,原因是lingo更类似英语口语的写法,对非程序员更友好。
口语式语法:
setthetextofmember"lecturername"to"dean"
这个语句比较接近英语口语,我们也可以省略掉set,同时将to写成=,因此就有了下面这种写法:
the property of object = value
thetextofmember“lecutureername”=“dean”:
点语法:
member("Message").text="dean"
在点语法中,语句可以进一步简化为以下的形式:
object.property=value.
在DirectorMX2004中,帮助文档不再列出口语式语法,因此学习点语法是很有必要的。
条件和条件语句
在执行一组指令前判断某个条件是否成立通常是很有用的。
术语TRUE或数字1表示条件成立,术语FALSE或数字0则表明条件不成立。
例子:
thesoundEnabled –-系统属性(读写),决定影片声音是否在播放(TRUE)or(FALSE).
themouseDown –系统属性,表明当前鼠标是否正在被按下(TRUE)or(FALSE).
一些条件仅能读取(如 themouseDown),另一写即可读也可写(如thesoundEnabled),可以使用not操作符反转条件。
thesoundEnabled=not(thesoundEnabled)
条件语句 ,允许你检查特定的条件然后执行某个动作,有两种方式可以测试条件:
if..then and case.
使用 if...then
if 条件(表达式) then 执行(语句)
单行语句 if...then是最简单的条件语句形式.
例子1
让精灵一直下落到某一个位置:
ifsprite
(1).locV<320thensprite
(1).locV=sprite
(1).locV+10
让精灵向上移动,可以这样写:
ifsprite
(1).locV>180thensprite
(1).locV=sprite
(1).locV-10
在向下或向下按钮上分别写上这2个语句,就可以控制精灵在限定的范围内移动了。
例子2
ifrollover
(1)thenmember("Message").text="Youhavemovedthemouseoversprite1."
也可以这样写:
ifrollover
(1)=TRUEthenmember("Message").text="Youhavemovedthemouseoversprite1."
可以删除 =TRUE
例子3
ifrollover
(1)then
member("Message").text="Youhavemovedthemouseoversprite1."
else
member("Message").text="Themouseisnotoversprite1."
endif
这个例子测试对于鼠标是否悬浮在某个精灵上(混合模式为matte时,作用区域为图像的有效区域)以此将不同的信息赋予member("Message").text。
使用多行 ifthen 语句时,要求在结尾处用endif 语句结束。
使用操作符and 则要求多个条件表达式为真。
使用操作符or则要求某个表达式为真即可。
ifrollover
(1)orrollover
(2)then
member("Message").text="Youhavemovedthemousewitheroversprite1oroversprite2."
endif
有时,也会用到if嵌套,即在一个if语句中存在另一个if语句。
if 条件1 then
if 条件2 then
dosomething
endif
endif
对于上面这种情况,lingo首先判断条件1,如果它成立,再判断条件2,如果条件2也成立,就会执行dosomething 。
在这个例子中,我们也可以用and 操作符连接两个条件:
if 条件1 and 条件2 then ...
然而,如果我们想要当某个条件成立时就做一些事情,这时可以使用if…then…else…语句,但这样显然写起来很麻烦,于是case语句就出现了,它可以简化语句的结构。
使用case语句
caseexpressionof
value1:
statement
value2:
statement
otherwise:
statement(s)
endcase
case语法使用多个分支逻辑结构,这比编写if...then 语句更容易.
例子
casetherolloverof
1:
member("Message").text="Youhavemovedthemouseoversprite1."
2:
member("Message").text="Youhavemovedthemouseoversprite2."
3:
member("Message").text="Youhavemovedthemouseoversprite3."
otherwise:
member("Message").text="Themouseisnotoversprite1,2or3."
endcase
上面这个例子测试鼠标是否略过精灵1,2,3,同时设置member'"message"的文本信息。
上面的情况,如果用 if...then 可以写成:
ifrollover
(1)then
member("Message").text="Youhavemovedthemouseoversprite1."
elseifrollover
(2)then
member("Message").text="Youhavemovedthemouseoversprite2."
elseifrollover(3)then
member("Message").text="Youhavemovedthemouseoversprite3."
else
member("Message").text="Themouseisnotoversprite1,2or3."
endif
上面这种情况下,case语句确实比if语句好。
循环语句
循环的过程就是不断重复一段脚本或电影。
当一个条件为真或是给定循环的次数,语句就可以被执行。
条件成立时,指令就可以重复执行:
repeatwhilecondition
statement(s)
endrepeat
例子
repeatwhilethemouseDown
nothing
endrepeat
当鼠标是按下状态时,上面语句的功能是什么事也不做。
使用 endrepeat结束循环语句。
根据指定的次数重复一个动作:
repeatwithlocalVariable=startValuetoendValue
statement(s)
endrepeat
上面的语句表示,由变量localVariable决定循环的次数,变量localVariable的值在初始值和结束值之间,每循环一次,初始值递增1。
也可以让变量localVariable的值递减:
repeatwithlocalVariable=startValuedowntoendValue
例子
repeatwithx=6to10
sprite(x).visible=1
endrepeat
上面的例子设置了精灵6到精灵10的可见性,使用了局部变量x,语句sprite(x).visible=1运行5次(从6到10)每次使x的值递增1,使用循环比下面的写法要容易:
sprite(6).visible=1
sprite(7).visible=1
sprite(8).visible=1
sprite(9).visible=1
sprite(10).visible=1
退出循环:
使用 exitrepeat 命令,这个命令让程序跳出当前repeat语句。
跳过当前的循环执行下一次循环:
使用nextrepeat 命令的例子:
例子
repeatwithx=6to10
if(xmod2)=1thennextrepeat
sprite(x).visible=1
endrepeat
上面的例子设置精灵6,8,10的可见性,当x为奇数时,语句sprite(x).visible=1 没有被执行,因为使用了 nextrepeat语句。
mod 操作符表示取两个数的余数。
局部变量、全局变量和属性变量
变量即存储数据的容器,随着时间的推移这些数据通常变化(变化)。
在director中按变量作用范围不同,有3种变量类型,分别是局部变量,全局变量,属性变量。
变量的命名规则
只能是字母、数字或下划线的组合,不能以数字开头。
局部变量
局部变量:
只能在定义它们的处理程序内部使用
例子建立影片脚本:
onsetLocalVar
localVar=“Iamalocalvariable”
end
在消息窗口中输入:
setLocalVar
这会执行setLocalVar处理程序,定义局部变量并给它赋值,继续在消息窗口中输入:
putlocalVar
输入结果是:
--
原因是我们不能在处理程序外部使用局部变量。
改写脚本如下:
onsetLocalVar
localVar=“Iamalocalvariable”
putlocalVar
end
在消息窗口中输入:
setLocalVar
输入结果是:
--“Iamalocalvariable”
原因是局部变量是从当前的处理程序中被访问,局部变量只在调用它所在的处理程序时才会存在。
全局变量
全局变量可以在不同的处理程序或不同的脚本文件甚至不同的影片之间被访问。
例子建立影片脚本:
globalgGlobalVar
--在脚本开始处,我们使用global关键字声明变量为全局变量。
--根据命名习惯,在全局变量名前面加上g
onsetGlobalVar
gGlobalVar=”Iamaglobalvariable”
end
ongetGlobalVar
setGlobalVar
putgGlobalVar
end
在消息窗口中输入:
getGlobalVar
输出结果是:
--”Iamaglobalvariable”
全局变量的优点是可以在任何时间从影片的任何位置访问到它们,全局变量声明后就存在于内存中,除非主动释放它们。
属性变量
属性变量用于行为脚本或父脚本中(不能用于影片脚本),用来存储针对它所赋予的特定对象的信息。
例子创建下面的行为
propertypPropertyVar
--类似于全局变量,我们声明变量的类型
--根据命名习惯,在属性变量名前面加上p
onbeginSprite
pPropertyVar=“Iamaproperty”
end
将上面的行为脚本加到精灵1上,然后播放影片,当影片播放时,在消息窗口中输入:
putsprite
(1).pPropertyVar
输出结果:
--“Iamaproperty”
属性变量储存在脚本或创建它的脚本实例中,scriptInstanceList 是精灵的属性,包含加在此精灵上的所有脚本实例的列表。
例子2在脚本中使用带有参数的属性
编写下面的行为并将它加在精灵1和精灵2上
propertypPropertyVar
onsetPropertyme,varData
pPropertyVar=varData
end
ongetPropertyme
putpPropertyVar
end
参数 me 在处理程序名后面,用来引用这个脚本附加到的特定的精灵,对于不同的精灵,变量 pPropertyVar可以包含不同的值。
影片运行时,在消息窗口输入:
setProper