Director Lingo 语言入门.docx
《Director Lingo 语言入门.docx》由会员分享,可在线阅读,更多相关《Director Lingo 语言入门.docx(10页珍藏版)》请在冰豆网上搜索。
DirectorLingo语言入门
DirectorLingo语言入门
ad_top 什么是Lingo?
使用过Director的朋友一定都知道Lingo语言。
Director的动画制作功能最容易为大家所接受,但是Lingo语言就有点让人感到神秘兮兮,光是纷繁复杂的函数和多而庞杂的变量就让人望而生畏。
其实Lingo没有我们想象的那么复杂,甚至有些非常简单。
如果你和我一样想学习Lingo又有编程恐惧症的话,我们就一起开始下面的课程吧^_^。
首先明白一个最基本的问题。
为什么需要在Director中进行编程呢?
举1个非常简单的例子:
如果制作完成了一个没有任何lingo语言的电影,电影将会按照每秒钟15帧画面的速度“勇往直前”的播放下去直到最后一帧,即便你如何干涉都没有用。
对于使用它的人来说,这是一个非常糟糕的导航。
而Lingo就可以改变这种状况。
使用Lingo,你可以让播放头停在第1帧。
直到你按一个按钮才继续。
或者你可以直接跳到第22帧。
你也可以调用别的电影,甚至打开网页。
Lingo还有更多更强的功能,可以完全控制cast成员和sprites,启动电影的播放和暂停等等,甚至可以控制你的计算机,例如关机,退出director,或者弹出对话框通知用户一些事情。
下面的1个例子就是一个非常简单的Lingo。
如果您安装了Shockwave8.0player.您就可以看效果。
如果您看不到下面的效果,请点击下载,并安装Shockwave8.0player。
因为我们以后的范例都会用到这个插件。
Ok上次我们使用Message窗口进行了一些调试工作.这次我们就来正式学习.首先请大家看上面一个范例.(如果你不能观看,请到首页下载Shockwave8player插件.因为我们以后也会用到他.)
我们来分析一下这个例子.页面上有三个按钮,单击任何一个跳转到一个画面.然后按返回按钮返回.其实导航结构是这样的.主界面-->子模块,然后子模块-->主界面.
我们首先看看时间轴是如何安排的.时间轴上首先第一段是程序的封面和三个按钮,第二段是错了的画面,第三段是对了的画面,第四段是错了的画面.所以上面的例子实际上就是从封面跳转到下面不同的时间轴段,然后按一个按钮就返回封面.
下面我们来实际制作这个程序,首先导入界面的四张图片,然后拖拽到时间轴上.每段5帧画面.
主界面1-5帧.第二段10-15帧第三段20-25帧第四段30-35帧.
接下来是跳转按钮.选好工具栏上的Button在主界面上绘制按钮.(如果工具栏不出来可以选择菜单window->Toolbar).依次放在Director的第2第3第4通道中.
这些都制作完成之后,再制作返回按钮.由于接下来所有子模块用的都是同样的按钮.所以画一个就可以.并且帧数从10-35贯穿所有模块.
Ok现在我们的程序框架基本上搭建好了接下来就是填写程序了.如果现在我们马上运行,程序会从头放到底.没有任何变化所以我们现在的第一个任务就是要停住画面.为每一段画面都加上语句停止画面.
首先将播放头移动到第一段的最后.也就是第5帧画面,双击上面脚本通道中的单元格.也就是图中的黑色方块处.
在弹出的脚本窗口中,输入脚本.gotheframe这句命令使播放头停止在这个画面上.
这里解释下里面的命令的作用.
Onexitframeme--当退出帧的时候
gotheframe--停止在这帧画面上
end--该段程序结束
现在播放电影可以看到,整个程序在第5帧画面停止不走了.同样道理在其他几个场景最后一帧里面写好同样的语句.分别是5\15\25\35帧.
刚才我们在整个画面中给帧上了脚本.让播放头停在帧上不动.接下来实现点按钮,跳转到某段画面.因为我们是按了按钮才发生动作.所以我们要给按钮指定脚本.在屏幕上选中一个按钮选择鼠标右键,在菜单中选择Script.
脚本这样写:
onmouseUpme--当鼠标从按钮抬起时候
goframe10--跳转帧10
end--结束事件
播放电影可以看到一旦按了第一个按钮之后就跳转到第二段画面.我们如法炮制给主界面中剩下的按钮加上脚本.分别是goframe20和goframe30.要跳回去怎么办呢?
给跳回按钮加上脚本goframe1
oK现在为止整个程序之做好了.这个例子主要用了go语句
格式是Goframe<帧数>--跳转到某帧
Gotheframe--停止在某帧
同时我们还分别试验了给一个帧加上脚本和一个按钮加上脚本.也许你现在还有点糊涂,没关系更多的概念我们再下次一个个讲解.请大家思考制作这样一个例子.
做一个类似Powerpoint简报的东西,给5张图片,依次显示,每次显示一张图片.按了按钮之后就显示下一张.
如果您很轻易的做好了程序再想想如何加一个按钮倒过来向前播放.
一、事件与命令
事件
在上次的教程中,我们已经初步试验了Lingo的编写和运行.这次我们要对于Lingo的一些基础知识进行探讨.我们首先从一个最简单的脚本进行分析。
还记得上次我们让电影停在某帧时候的脚本是如何的么?
Onexitframe
gotheframe
end
这里面就包含了一个Lingo的最基本的一点。
Lingo是基于事件(event)的。
当某个事件发生的时候,才会执行下面的动作。
在上面这个脚本中gotheframe这句话是在Onexitframe(退出改帧)的时候执行的onexitframe就是一个事件,当这个播放头退出该帧事件发生了,才执行里面的语句,直到遇到end为止。
同样,下面的一些都是Lingo的也就是事件。
Onmousedown--当鼠标按下
Lingo语句
end
OnstartMovie--电影一开始
Lingo语句
end
OnenterFrame--当播放头进入一帧
Lingo语句
end
Onbeginsprite--第一次播放这个sprite的时候
Lingo语句
end
Onkeydown--当键盘按下键的时候
Lingo语句
end
什么时候采取什么样的事件呢?
这是和脚本的类型有关的。
别着急等会儿我们一个个来看。
命令:
知道了什么是事件以后,就简单了。
在事件当中的一些语句就是命令。
比如gotheframe这句就是一个命令。
它的作用可以停止播放头。
最后我们用一个形象的比喻来作为事件和命令的解释。
On走进屋子
喝水
end
发现了么?
当走进屋子(事件)喝水(动作)
二、脚本类型
Lingo的脚本类型分为frame脚本,sprite脚本,cast脚本和movie脚本。
在这里我不想把脚本前面的关键字翻译成为中文因为这样可能容易引起歧义。
区分这些脚本的类型的方法就是看这些脚本写在什么位置上。
frame脚本写在帧里面。
Sprite脚本写在Sprite上,Cast脚本写在Cast上,而Movie脚本写在电影中不依靠任何的其他帧和角色。
这样写看起来有点象废话。
不过等下解释了大家就会明白的。
frame脚本
写在帧中的脚本就是frame脚本。
播放头在这帧中的时候就会执行frame脚本。
编写frame脚本,只要双击帧脚本通道,系统就会弹出窗口。
此时就可以编写frame脚本。
我们上一个例子中用到的第一个脚本就是帧脚本。
我们是在Score(分镜表)的脚本通道里面写的。
我们当时需要把播放头停止在第5帧。
这个动作要求在第5帧画面的时候执行。
并且和别的sprite或者Cast都没有关系。
仅仅是在帧发生。
于是我们采用在帧脚本。
在帧脚本通道第5帧的地方双击。
系统弹出窗口,默认的事件为onexitframeme当帧退出的时候,我们执行下面的命令,停在原地。
常用的frame脚本事件有。
onenterframe--当播放头进入该帧的时候
lingo语言
end
onexitframe--当播放头移处该帧的时候
lingo语言
end
Sprite脚本
Sprite脚本应用于Sprite中。
我们把Cast库中的演员拖到舞台之上以后就是Sprite了。
在舞台上对准一个Sprite按右键在菜单中选择Script系统弹出对话框。
这个脚本窗口里写的就是Sprite了。
Sprite脚本在Sprite的一系列操作中才会有作用。
比如,单击Sprite,双击sprite,鼠标在sprite上面,鼠标移出sprite。
当我们想要对舞台上的某个东西操作,来发生动作的时候就可以用Sprite脚本了。
上次的例子中我们要求按一个按钮跳转到第X帧。
使用的就是Sprite脚本。
那段代码就是
Onmousedown
goframe15
end
当鼠标按下按钮这个Sprite的时候,播放头到第15帧去。
Sprite中常用的一些事件主要有
Onmousedown(鼠标按下)Onmousup(鼠标抬起)Onmouseleave(鼠标离开)Onmousewithin(鼠标在对象内)。
Cast脚本
Cast脚本是写给Cast(演员)的。
在角色库中可以编写。
对准一个cast按右键盘,选择里面的CastmemberScript,弹出窗口中编写的就是Cast脚本。
当对某Cast进行一些操作的时候Cast脚本就开始发挥作用。
Cast常用事件何Sprite基本相同。
读到这里读者稍微思考一下就会发现一个问题。
好像Cast脚本和Sprite脚本差不多?
下面我们来回忆一下Cast和Sprite的关系。
角色库中的叫做Cast,拖到舞台上就叫做Sprite。
一个Cast可以对应多个Sprite.当我们对一个Cast编写了脚本之后,电影中所有相应的Sprite都具有了相同的脚本而无需再次编写.因为Sprite就是基于Cast而产生的.例如上面图中给Cast圆编写了脚本之后.舞台上三个Sprite都具有了相同的脚本.读者接下来就会有另外一个疑问当舞台上的Sprite也有了脚本同时Cast也有脚本的时候谁优先执行呢?
答案是Sprite脚本优先执行.为了帮助大家想通.时刻记住Director是按照电影的观念来安排的.Cast就是演员,演员都有自己的个性.Sprite是演员扮演的人物,戏中的人物都是有戏中人物的个性的.当戏开演的时候谁的个性占上风呢?
显然是戏中的人物个性占上风.
Movie脚本:
Movie脚本不依赖任何一个Cast,sprite,frame.他可以独立在电影内存在.凡是在电影中全局性的.还有"经常性"的交互时间都在这里写的.还有电影一开始的时候和结束的时候发生的命令也要写在这个里面.
下面举出一些Movie脚本独有的一些事件.
Onstartmovie电影开始的时候
OnStopMovie.电影结束的时候
Onidle系统空闲的时候没有任何脚本被执行的时候.
Movie脚本的编写单击工具栏上的
就可以了.
上次我们探讨了关于Lingo语言的基本格式.从本次开始我们就来一个个实际的Lingo语言.今天我们学习导航命令.
go语句
goframe<帧数>--跳转到第某个画面,例子goframe20,播放头跳到第20帧.
gotheframe--播放头停在某个画面.
go<标记>--跳到某个有标记的画面.
gomovie<电影名字>--从现在的电影跳转到另外一个电影中去.例如gomovie"hello"跳转到名字叫hello的电影中.
下面是两个扩展命令
go<帧数>ofmovie<电影名字>--跳转到另外一个电影的某个画面.
go<标记>ofmovie<电影名字>--跳转到另外一个电影的某个标记.
go命令我们已经很熟悉了那就是可以使用go直接跳转画面.停住播放头.这些我们都在第一个例子中进行了一个试验.这次我们着重要说的是画面的标记mark.什么叫做标记呢,故名思意就是给一个帧做上一个标记.现在有这样的一个例子.我要跳转到第20帧,Lingo语言应该怎样写呢?
goframe20
用了帧标记是怎样呢?
比如我给20帧加上一个标记,名字叫做"ok".我们可以这样写.
go"ok"
这两条命令是等价的.大家可以分别单击下面的两条语句来观察结果.在下手之前大家想一下,如果我到了第20帧想回来应该怎样写Lingo语句呢?