Director8.5进阶指南

附录

Director8.5是由Macromedia公司出品的一个多媒体程序编著工具,具有多种媒体整合编排的能力,利用Director8.5可以开发出交互能力极强的多媒体程序,被广泛应用在触摸屏、产品的多媒体演示和CAI(计算机辅助教学软件)的开发中。

一、新增的功能

Macromedia对Director8.5的创作界面相对于Director7.0进行了比较大的改动,使它与Macromedia的其他产品(如网页制作三剑客Fireword、Dreamweaver和Flash)在界面上风格类似。但我个人认为Macromedia对Drector8.5的最伟大的改动是:用Property Inspector 替代了旧的Sprite Inspector,利用这个新的Property Inspector我们可以查看和控制影片中所有元素各方面属性。例如:可以在Property Inspector中用数字的方式改变精灵(Sprite)的位置、大小和旋转度数,只要你在Property Inspector中键入相应的数字就可以了,要比用鼠标来拖动方便很多,而且还可以成批地修改。对Cast窗口的改动是:增加了list View选项,利用这些域可以轻松地查看角色成员(Cast member)的所有属性。还有就是舞台(Stage)终于可放大和缩小了,尽管只有几个固定的缩放级别,但已是非常的有用。
上面讲到的是Director8.0新增的功能,而Director8.5之于8.0最大的更新是Shockwave 3D,并在工具栏上新增了一个Shockwave 3D Window 按钮。借助这个新增的3D功能, 我们不仅可以在Director中使用控制三维模型,还可以为我们的多媒体产品创建真正的三维文字,借助Director强大的网络功能我们可以轻松开发出Web3D产品。
Lingo方面的更新更多的是和Shockwave 3D结合在一起的,为更好的控制3D,Macromedia为我们增加了众多的 3D lingo命令。
增加了对新媒体的支持,比如流媒体RM、Flash 5的影片、MP3音频、QuickTime 5、动画GIFs以及HTML。

二、快速入门

我相信对这篇文章感兴趣的读者朋友一定都是有些Director使用基础的人,其中不泛高手,所以这一篇“快速入门”并不是教你如何一步步地使用Director,而是从一个新的角度向你介绍Director中各个组成部分的作用和使用方法,现在就让我们开如吧!

1.界面

Director启动后的界面是由好几个窗口组成的((图1)),也许你的Director启动时不是这个样子的,这是因为Director启动时,它会记起上次关闭时组成窗口的位置和设置,并在这次启动时恢复。在Director的几个组成窗口中Score 窗口、Cast窗口、Stage窗口和Property Inspector窗口是最常用也是最关键的窗口。

图1
图1

2.Score窗口

Score窗口主要由两部分组成,一个是可由1000个精灵(sprite)组成的精灵通道,这1000个通道可用于图形、文本和数字视频等精灵。另外一部分由6个特殊通道组成:变换(transition)通道、节奏设置(Tempo)通道、颜色通道、两个声音通道和一个帧行为(Behavior)通道。
在Score窗口中是以帧是基本单位,也是衡量影片的时间单位。所以有人说Director是一个基于时间线的多媒体编著工具,这有别于同是Macromedia出品的Authorware的那种基于流程的方式。帧是描述影片随时间的推移而改变的单个视图,这有点像电影胶片中的画面,有时帧与帧之间的差别是很细微的,有时却有着极大的差别。所以为了模糊这种别带来的视觉跳跃,我们往往会使用变换(transition)通道,它的作用就是设置一些过渡效果。
当一个角色成员(Cast Member)被放在舞台(stage)上,它就会占用一个精灵通道,并被称为精灵(Sprite)。我们可以在舞台上叠放许许多多个角色,用以创建一个画面:远处的山、近处的草地、花、树、山顶上的太阳以及飞过树稍的小鸟等。舞台上的每一个精灵都可以移动或是被改变的,但实际运用中我们往往只会让其中某个精灵移动其他的保持静止,例如:小鸟扇动着翅膀从左边飞到右边;或是小鸟在画面中央不停地扇动翅膀,而树和山从右边移到左边。
特殊通道中的声音通道是Director 里八个声音通道中的两个,序号分别是1和2,其余六个通道则需要用lingo来调用,当然这两个也可以用lingo来调用。
帧行为通道主要是放置控制帧的行为,比如我们常用到的暂停行为:
on exitFrame me
go to the frame
end
节奏(Tempo)设置通道用来控制影片的播映速度,比如以什么样的帧速率播放影片、暂停几秒或是等待用户的按任意键或单击鼠标等。

3.Cast窗口

影片中用到的所有角色成员(Cast member)都存放在Cast表中,也是影片中用的所有媒体素材的大集合,其中包括图形、声音、电影片段、脚本、行为以及要使用到的过渡效果。
弄清角色成员和精灵的关系是很重要的,为了说明这个关系我们用一部电影来做比喻。角色成员就是电影中的演员,而精灵就是演员在影片中的表演,有时候是提着刀仰天长笑,也有血染征袍的镜头,精灵实际就是角色成员在舞台上的一段“表演”。那么脚本和它们两者的关系又是什么呢?如果我们把脚本比喻成电影创作中的幕后工作人员,就容易说明了。幕后工作人员协助演员在舞台上进行表演,就形成了我们在电影院或是剧院中看到的表演,脚本的作用也是为了辅助角色成员完成“表演”,脚本为角色成员的“表演”创建各种各样的效果,甚至于完全控制它的表演。

4.Property Inspector(属性检查器)

Inspector(检查器)在Director中是一个非常有用的东西,通过选择菜单的“window→Inspector”,然后从子菜单中选择相应的Inspector检查器。比如:
(1)Behavior Inspector:使用Behavior Inspector创建新的行为和修改现有的行为。
(2)Text Inspector:使用Text Inspector可以改变文本的字体、字号大小以及设置其他的文本格式,还可以给其中的一段文本添加超链接。
(3)Memory Inspector:在Memory Inspector 窗口中将用不同的色块来显示影片中使用到的内存总量,其中包括应用程序、Cast和Score所用的内存,这将有助于你控制影片大小,提高影片稳定性和运行效率。
(4)Property Inspector:利用Property Inspector可以显示任何所选对象的当前属性,这些对象可以是Cast中的角色成员(Cast member),也可以是舞台(stage)或是Score其上的精灵(sprite)。在Property Inspecto窗口中,几乎可以调节整影片中每一个元素的属性,甚至于精灵上的行为参数。

5.文本编辑器

Director可以用两种不同的方式编辑文本,还可以使用其他程序生成的文本,特别是升级后的3D文本更是具有吸引力。在文本的Property Inspector的窗口中新增了一个3D Extruder页,在这一页中集中了所有文本的3D选项,比如光影较果、表面贴材等。需要注意的是:想要3D Extruder页起作用,你必须打开文本Property Inspector窗口,在text页中把display选项设置为 3D mode 。而文本的其他特性,比如:是否可被编辑、文本框的滚动条或是文本框的大小是否可以随文字的多寡而放大或缩小,都可以在Property Inspector的text页中进行设置。

三、Lingo基础

Lingo是一种Director内部的编程语言,同时也是一种角色成员类型,Director把这一类型的角色成员称为脚本(Script)。Lingo的功能是非常强大的,在所有Director产品中,不使用它可以说是凤毛麟角。Lingo可以完全控制角色成员(cast member)和精灵(sprites), 可以启动Director影片的播放和暂停等,甚至可以控制你的计算机, 例如关机,退出director,或者弹出对话框通知用户一些事情。

1.变量

Lingo中使用的变量一般不用事先声明,一但使用该变量,它就会被创建,但这仅局限于在赋值时,如果你没有赋值就直接使用变量,Director就会报错。例如:
Set myVar=100或myvar=100不用声明,lingo就会创建一个整数型变量 myVar。而myVar=yourVar+100则是错误的,因为yourVar没有赋予初值,Director就知道它是什么类型的变量。修改为:
yourVar=100
myVar=yourVar+100
这样写就正确了。
Lingo中的变量名最多可以包含256个字符,但是我们在给变量命名时,没必要起这么长的名字,何必难为自己呢?变量必须由字母或是下划线(“_”)开头,大小写都可以因为lingo对变量的大小写并不敏感。然后,可以在名称中使用数字,但不能有空格。例如:_abc123,而“123abc”和“my name”则是不合法的变量名。
在编程语言中变量总是具有不同的数据类型,例如:整数(intage)、浮点(float)数、字符串(String)和布尔值,Lingo中变量也有多种类型。字符串必须用引号括起来,例如:myName="5DM DongYingMO"。此外,Lingo还有一种特殊的数据类型──对象。对象可以把数据函数组合在一起,Director中的对象更多的是角色成员和精灵。也就是说角色成员和精灵也可以作为一种数据赋予一个变量,例如:
mySprite = sprite (2)
myMember = member("5dm")
在Lingo中有一个特性要注意的是,变量类型是可以任意改变的。也就是说一个变量的最初值如果是字符串,当你给它赋于一个整数时,它的类型就会变成整数型。这虽然给我们的编程带来了灵活性,但是会带来一些混乱和不稳定,建议大家在使用中尽量不要随意更改变量的类型。

2.语句和运算符

Lingo脚本是由一行行的语句组成,语句就是一行可执行的lingo代码,每一行语句都由回车结束,例如:
myVar=100
myAddvar=myvar+20
如果要续行时可以用“\”来结束,例如:
myVar=100
myAddvar=myvar+\
20
运算符有很多种;“=”是赋值运算符;“+-*/”是算术运算符;“=、>、<、>=、<=、<>、AND、OR、not”是逻辑和比较运算符;“&&、&”是字符串的连接运算符,“&&”在连接时添加一个空格。
Lingo也像其他的语言一样,也有if then的判断语句和Repeat While的循环语句,还有一些特殊的事件类型,例如鼠标事件:
On mouseUp
语句
end MouseUp
Lingo中的注释是用两个横线(“--”)来引导的,例如:
myVar=100+100 --这是一行是注释,在编程时写注释是个良好的习惯。

3.不同类型的Lingo脚本

Director有4种类型的脚本,分别是:movie script(影片脚本)、behavior(行为)、parent(父脚本)和 cast member script(角色成员脚本),每个脚本都有自己的作用域。
影片(Movie)脚本的作用域是全局的,它可以被任何其他类型的脚本或是Message窗口调用,还可以在影片的任何位置被调用。影片脚本可以在影片开始(on startmovie)或是停止(on stopmovie)时自动执行,或是用来初始化全局变量,存放自定义的函数和处理程序。创建的方法很简单,用Ctrl+0打开Script window,在Property Inspector窗口的Script 页内的Type 中选择 movie 即可,Director的默认类型也是影片(Movie)脚本,在Property Inspector窗口中还可以设定成其他的脚本类型,如:behavior(行为)和parent(父脚本)。
角色成员脚本是附加在角色成员上的,一个角色成员只能有一个角色成员脚本,并且它们是一起被保存在同一个角色成员表格中的。创建一个角色脚本的方法:在cast window中选中角色成员,并单击鼠标右键,然后在菜单中选择 cast Window script。
行为分为精灵行为和帧行为,分别是附加在精灵和帧上的。帧行为是通过帧行为通道作用于帧的,一个帧只有一个帧行为,一个精灵却可以了有多个附加行为。行为是作为一个独立的角色存在,而不是像角色成员脚本那样和角色成员一起存储的,基于这个特性,行为是可以应用到许许多多个精灵上,行为也是Director最常用到的脚本类型。给精灵添加行为有两种方式,一种是新创建一个行为脚本,一种是把已创建好的行为脚本附加给精灵。第一种操作方法是:用精灵的鼠标的右键菜单中的Script项。第二种的操作方法是:从Cast窗口中拖一个行为脚本到精灵上,或是从library palette中拖一个行为到精灵上。
帧行为是一种很特殊又很常用的行为,像前文在“Score窗口”一节中提到的暂停行为就是一个帧行为。在默认情况下,只要双击帧通道的某一帧,Director就会为这这帧创建一个on exitFrame 事件,你可以在这个事件中加入处理语句,也可以添加其他的事件比如:on prepareFrame和on enterFrame。

4.面向对象的lingo编程

面向对象的编程(OOP)概念在编程中的应用已经是很广泛和普及了,一种编程工具想要具有面向对象的编程的特性,都应该支持抽象、封装、继承和多态这四个基本特性,Dirctor做为一种多媒体程序开发工具完全具有面向对象的四个基本特性。
Lingo是怎样实现面向对象的呢?Lingo的父脚本就是对象。每创建一个父脚本都要为它起一个名字,这不同于其他的角色成员可以起名也可以不起名。Lingo的子对象就体现了一个对象的继承性,因为子对象是从父脚本派生出来的,父脚本和模板一样,它定义了一个对象具有什么属性和事件(能处理什么)。
在lingo中创建一个对象,打开一个新的脚本窗口,从Property Inspector 中Script 选项页下的Script Type 的列表中选定Parent,还要在Name域中为它命名。
对于封装,就是只有对象本身的处理程序才能访问和操作的数据和变量,Lingo不支持强制封装这种操作,但是仍然可以在设计中实现对数据和变量的封装。由于封装是把数据封装在对象内部,所以要改动程序时变得更容易,只要修改对象内部的处理程序和数据就可以实现了。
Director面向对象的编程不仅体现在Lingo上,还体现在其他的方方面面,比如我们可以把角色成员理解为一个对象,那精灵就是角色成员派生出来的一个子对象,它继承了角色成员的所有属性,而且在这基础上进行了扩展。正是由于Director具有面向对象的编程能力,使得我们在用Director开发多媒体程序时,能在更高的层次上考虑问题,使解决问题变得更容易,开发效率更高。

5.Lingo脚本的调试

“哎呀,怎么又出错了!”、“为什么我的脚本运行后总得不到预期的结果!是不是我这辈子都真成不了优秀的程序员!”你是不是有过这样的感叹呢?如果没有,说明你写的程序太少。如果有祝贺你!你很已经成为或快要成为一名优秀的程序员了。
优秀的程序员也会碰到棘手的问题,但是优秀的程序员知道如何去发现问题,并想法子解决问题。借助一些工具我们可以更快地发现问题的所在,所幸的是Director为我们提供了多种在程序中查找问题的手段:
(1)关闭脚本编辑窗口时,提示所犯的语法错误。
(2)提供Watcher窗口、断点和Debugger窗口,以帮助定位逻辑错误。
给你的程序插入注释,这个往往被人轻视,实际上插入足够多的注释不但不会浪费你的时间,反而会大大节省你和你伙伴们的时间。因为当自己或其他人必须从头理解别人的脚本时,又没有注释提供帮助时,那宝贵的时间就被浪费掉了。
语法错误是Lingo错误中最常见的,这种错误主要是由错误的键入、用错属性和语法引起。幸运的是这种错误比较容易被发现,因为每次关闭脚本编辑窗口时,Director会自动查找语法错误或由单词拼写产生的错误,并在错误提示窗口中给出提示。充分利用好脚本编辑窗口中的Alphabetical Lingo和Categorized Lingo 两个按钮可以减少因拼写错误而造成的语法错误,它们分别以不同排列方式给出了Lingo的所有命令及命令的语法格式。
要修正语法错误下面的方法可以参照:
(1)检查拼写错误;
(2)检查是否丢失命令参数;
(3)检查是否丢失引号;
(4)查看正确的命令语法。
没有了语法错误并不代表你的脚本就是正确的,当给变量或属性赋值不正确时,写错了运算式时,就会产生逻辑上的错误。要解决逻辑上的错误,应该按照代码的执行次序一步一步地运行,依次查找不正确的结果。这个过程有可能会非常的复杂。处理逻辑错误,我们可以借助Director提供的Message窗口、Debugger窗口和Watcher窗口。
在Message窗口(打开的方法:选择菜单“Window→Message”或是快捷键“Ctrl+M”)中键入被怀疑有问题的代码行,如果运行正确,则肯定是程序的其他部分在引发错误。也可以单击Message窗口中的Trace按钮来跟踪影片的代码执行情况,如果你的代码很多,并有像go to the frame 这样的循环代码时,Message窗口的跟踪信息将会飞快地滚动,只有在你停止播放影片或是再单击一次Trace按钮时,它才会停下来。
如果你觉得Message窗口显示的信息太多,那么可以使用Watcher窗口(打开的方法:选择菜单“Window→Watcher”或快捷键“Ctrl+Shift+~”),它只会显示被选中的变量和其他Lingo表达式中存储的值。要使用这个功能你得先在Debuger窗口、Message窗口或Script窗口中选择要看的变量和表达式。
操作步骤如下:
(1)选中窗口中的变量。
(2)单击Watch Wxpression按钮或是按下Shift+F9,
(提示:如果在Message窗口或Script窗口中没有看到工具栏,请选择菜单:View→Message ToolBbar;对应于Script窗口的是菜单:View→Script toolbar)可以让Watcher窗口一次查看多个表达式和变量的值,当这些值发生变化时,Watcher窗口就会显示当前的值。
如果要添加或删除查看列表中的变量或是表达式,可以按以下步骤:
(1)Watcher窗口的Add/Remove域中键入变量的名字,或是在列表中直接选中。
(2)单击Add按钮添加变量,或者单击Remove按钮删除变量。
在调试中可能会遇到要给变量设置一个初值的情况,比如一些限定次数的循环中:repeat while myCounter<10
... ...
end repeat
可以在Watcher窗口中选中变量,在set域中输入值,单击Set按钮,变量就被赋予了一个初值。
Debugger窗口是调试复杂脚本的最好工具,你可以用手动打开它,首先选择菜单:“Window→Debugger”或是用快捷键“Ctrl+~”,一般情况下是不用手动打开的。当Director在执行脚本发生错误时或是执行时遇到断点时,Debugger窗口会自动打开。断点设置通常是在Script窗口,当然也可以在Debugger窗口。在Script窗口或是Debugger窗口中设置断点方法是:把光标移动要设置断点的代码行上,单击Toggle BreakPoint按钮或是按F9键,要取消断点则是把光标移到已设置断点的代码行上,单击Toggle BreakPoint按钮或是按F9键。
Debugger窗口还可以执行以下操作:
(1)一行一行地运行脚本。
(2)按顺序执行一系脚本。
(3)和Watcher和Script窗口一起配合工作。
(4)检查局部、全局和属性中的值。灵活使用Debugger窗口中的各种调试手段是你排除问题的最好方法,这方面的技巧非常值得化时间去学习和探索。还有一个要注意的地方要告诉你,在Debugger窗口中你是不能修改代码的,代码只能在Script窗口中修改。
提示:在Message窗口中使用 ShowGlobals 命令可以显示当前可用的全局变量。

四、Director的网络应用

随着因特网的普及,许许多多的软件都有了网络版,Director影片也不例外,在Web上使用的Director影片被称为Shockwave影片。在Director上开发Shockwave影片是非常容易的,因为要设计一个能在因特网上传输的Director影片和设计用于其他传输方式(如光盘)上的多媒体程序基本类似,只是要稍做加工。现在就来看一下标准的Director影片中可以实现的东西,可以包括文本、图形、声音、动画、数字视频和3D模型,可以通过包含可编辑文本框、热区和导航按钮等来实现用户与影片和交互。所有这些在Shockwave影片上也可以实现,因为大多数Director功能和Lingo命令都能用在Shockwave影片中。
开发Shockwave影片要注意的问题:文件尺寸要尽可能的小,压缩的Shockwave影片大小最好在50K到200K之间,以减少网络的下载时间,因为对于下载Shockwave影片的用户来说,调用几个小的Shockwave影片远比下载一个大的Shockwave影片好;一些Lingo命令出于安全问题不能被Shockwave影片支持,比如:关闭和启动外部应用程序的命令(quit和open),关闭和重启用的计算机(shutdown和restart),操作用户计算机文件命令(openResfile、CloseResFile、getNthFileNameFolder、SearchPath等);节奏(Tempo)通道的设置对Shockwave影片不起作用,只能通过Lingo脚本实现暂停和循环;自定义的菜单不可用;不能使用 SaveMovie(保存影片到磁盘)和PrintFrom(打印舞台上的精灵)。
Director的网络功能不仅体现在Shockwave影片上,还为扩展Director影片在网络上的能力而提供了NetLingo命令和函数。NetLingo不仅可以应用在Shockwave影片上,还可以应用于传统的Director影片(基于磁盘和CD-ROM发布的Director影片),开发出混合式的Director影片。
下面我们就用一个例子来体验Director的网络应用,在这个例子中我们将建立一个自己的聊天室。
(1)启动Director8.5,打开Property Inspector(单击工具栏的Property Inspector按钮或是快键Ctrl+Alt+S)中的movie页,把Stage Size的大小设为512×342,Stage fill Color(舞台背景颜色)设为灰色(#AAAAAA)。
(2)用Tool Palette(快键:Ctrl+7)上的“A”工具新建一个Text角色成员到舞台上,并输入文字:“请输入呢称”。右键单击此Text演员,选择“Font”,设置此演员字体,把加黑勾选去掉。在此Text角色成员的Property Inspector中进行属性设置:勾选Editable(使文本框在影片执行时可以输入文字)、Word wrap(文本框随文字的多寡而放大或缩小)、Table to Next Editable Item(当按Tab键时自动跳到下一个可编辑的文本框),并给角色成员取名字为“Name”,其他设置不进行改变。用同样的方法建立第二个Text演员,输入文字:“输入密码”,取名为“Password”。
提示:之所以用Text演员而不用Field,其原因是Director的Field对中文支持不好,容易出现乱码的情况。
(3)用Tool Palette(工具箱)中的按钮工具制作一个按钮,取名为“Connect”,并输入文字“连接”。
(4)调整好三个角色的位置,聊天室的登陆界面制作完毕。
保存影片,可以取名字为“Chat.dir”
下面我们来做聊天界面,聊天界面主要有三部分,输出窗、发言窗和在线人员名单,还是一步步来吧。在开始之前先打开Score窗口,单击第35帧处,目的是把播放头移到第35帧处,并在Mark一栏中第35帧处设置场景的标记为Chat。
(1)用Tool Palette(工具箱)的“A”工具在舞台上适当的位置建立一个Text角色成员,取名为“Output”,作为聊天室的输出窗口。
(2)在此Text角色成员的Property Inspector的Text页面中设置Framing属性为“Scrolling”,(目的是使这个文本框带上滚动条。)
(3)用Tool Palette(工具箱)的“箭头”工具改变这个文本框的大小和位置,你可以参照聊天室的样式设计,这个框尽可能的大,只样才能容下更多的文字。
(4)用同样的方法建立一个叫“Input”的Text演员,作为聊天室的输入栏,Framing属性也设为为“Scrolling”,还要勾选Editable属性。大小方面:宽要比“Output”小一些,高度以两行字为标准就可以了。
(5)在Input角色成员旁建立一个按钮,取名为“Send”,并在其上输入“送出”。
(6)在舞台右侧建立一个“Online”的角色成员,输入“在线人员”,调整好大小和位置。用Ctrl+鼠标单击,在弹出的菜单中选中“Mette”,目的是设置它的透明方式,这个角色成员只是个标签。
(7)在“Online”的角色成员下方建立一个叫“Member”的Text演员,对其做类似“Output”角色成员的属性设置。大小要比“Online”的角色成员大,以后我们就用这个文本框来显示在线的成员名字。
(8)在舞台右下角建立一个“Leave”的按钮,并在其上输入:离开聊天。
至此我们已完成了界面设计((图2)),下面的步骤就是将Director为我们设计的聊天行为一个个地放到精灵上,使我们的影片具有真正的聊天功能。

图2
图2

首先打开Score窗口,然后把播放头移动第一帧处,并在Mark一栏中的第一帧处设置场景的标记为Enter。然后单击工具栏上的Library palette按钮,打开 Library palette窗口,点击Library palette窗口左上角的Library List按钮,在弹出的菜单中选择:Internet>Multiuser。你将会看到Library palette窗口上出现了一排的行为。在使用这些行为之前我们还要做一些准备和了解一些知识。
作为一个聊天客户端程序,那么它是要与服务端建立联系的,那么我们是不是又要开始写一个服务端的程序呢?这倒不用,因为 MacroMedia已为我们提供了这样的一个程序,那就是与你的Director8.5一起装你电脑的Macromedia Shockwave Multiuser Server 3.0。现在你去你的开始菜单上看看是不是见到了?如果见到了请你运行它。运行MultiuserServer之后会有一个新的窗口打开,这就是我们的服务端程序。现在请你选择MultiuserServer窗口中的菜单:status>server,之后MultiuserServer窗口就会显示出一些信息,请你记下Server Server IP address 和 Server port,这很重要后面会用到。
现在让我们回到Director窗口,继续我们聊天室制作,还是一步步来。
(1)在Library palette窗口找到“Connect to Server”这个行为,并把它拖到舞台的“Connect”精灵上。
(2)这时会有一个新的对话框出现,上面有很多个设置项,第一个选项我们选“name”第二人选项我们选“Password”,然后找到Server Address和Prot Number把刚才记下的Server IP address和Server port分别填进去。其他的选项我们先不理它,然后单击“OK”。
(3)把播放头移到第35帧处,打开Library palette窗口找到“Disconnect from Server”行为,并把它拖到舞台上的“Leave”按钮上。
(4)分别把“chat output”、“Display Group Member Names”和“Chat Input”行为拖到舞台上的“Output”、“Member”和“Input”文本角色成员上,在弹出的对话框中直接单击“OK”就可以了。
(5)把“Send Chat Button”行为拖到舞台上的“Send”按钮上,把弹出的对话框中的“text or field sprite for chat input”项设为“chat output”。
(6)在这一步中我们将设置暂停,在帧脚本通道的第5帧处双击鼠标,在脚本窗口中输入:go to the frame,关闭脚本窗口。
(7)这一步的目的:是把上一步中写的帧脚本复制到第40帧处。在帧脚本通道的第5帧处单击鼠标右键,在菜单中选择“copy sprites”,然后在帧脚本通道的第40帧处单击鼠标右键,在菜单中选择“Paste Sprite”。
(8)为“Leave”按钮添加返回功能。打开Library palette窗口,在左上角的Library List按钮菜单中选择“Controls”,找到“Jump to Marker Button”行为并把它拖到舞台的“Leave”按钮上,在参数对话框中把“On mouseUp, jump to marker”设为“enter”。
现在这个聊天程序已经设计完成了,这只上个很简单的程序,你可以在这基础上加入自己的东西,比如一个很酷的Logo和启动画面。下面我的工作就是把这个影片发布到网上或是光盘上。
请你选存盘,然后选择菜单“file→Publish”,你会看到一个进度条在走,走完之后影片就生成了两个可以在网上发布的文件,一个:Chat.htm,另一个是:chat.dcr。你也可以仅把“chat.dcr”插入你自己漂亮的网页中。用户要在Web页上播放你发布的Shockwave影片,还必须为浏览器安装一个名为“Shockwave Play”插件,这一点你最好在包含有Shockwave影片的网页上进行说明,并告诉用户这是安全的。

五、Web3D的简单应用

这是个在Director8.5中使用3D的简单实例,在这个实例中我们将学习如何控制一个3D球体旋转和视角的移动。这个实例所要用的素材你可以通过下面的地址下载到,http://download.macromedia.com/pub/director/3d/3d_for_dir_users.zip能够直接导入Director8.5的三维模型是一种特殊的三维格式:W3D(Web 3D),这类三维模型我们可以在3ds max 或是其他的三维制作工具中创建,你可以在http://www.macromedia.com网站中找到相关的转换工具和插件。

1.旋转和改变视角

(1)新建一个Director8.5文件web3d.dir。
(2)单击工具栏上的“Import",在The Import Files into "Internal"对话框中找到Orb.W3D(它就是我们在这个实例中要用到的Web3D模型)这个文件,把它导入到角色成员表中。
(3)在The Import Files into "Internal"对话框中你还可以设置:是把Orb.W3D文件存到Cast表中,还是做一个外部链接。作为外部文件链接时,Dir文件将会比较小,但是在你发布影片时要记得把Orb.W3D文件一起发布。以上设置是在对话框下方的Media域中完成的,选择Link to External File则作为外部文件链入,如果使用默认的选项“Standard Import”,三维模型将会被保存在dir文件中。
(4)回到Cast窗口,你会发现名为“Orb”的角色成员,双击它Director就会打开Shockwave 3D 窗口((图3))。

图3
图3

(5)在Shockwave 3D 窗口中,你可以对三维模型进行各种各样的操作。
下面的步骤是创建一个3D Sprite。
(1)打开Stage窗口和Cast窗口,如是它们已打开,就省略这一步。
(2)把“Orb”角色成员,拖到舞台上,调整好大小和位置。
(3)一个3D Sprite 就创建完成了。
(4)3D Sprite 和其他类型的Sprite一样,可以在舞台上任意移动和缩放。
完成了3D角色成员和3D精灵的创建,接下来的任务是制作对它们的控制,控制它们的任务将由一组按钮完成,现在我们就来制作按钮。
(1)打开Paint窗口,画一个红色的箭头,关闭Paint窗口。
(2)把刚刚画好的箭头角色成员拖到舞台上,按住Ctrl+鼠标单击刚刚创建的箭头精灵,在弹出的菜单中选择“Matte”。
(3)鼠标右键单击箭头精灵,在弹出的菜单中选择“Copy Sprite”。
(4)在舞台空白处单击鼠标右键,在弹出的菜单中选择“Paste Sprite”。
(5)舞台上就会多出一个精灵,但却和原来的重叠在一起,在Score窗口中你会发现多出了一个精灵。在舞台上把新复制出来的精灵拖到一个新的位置。
(6)选中第二个箭头精灵,打开Property Inspector,单击Property Inspector窗口上的 “Flip Horizontal”按钮,使这个精灵反转,我们就得到了互为相反方向的两个箭头。
下面我们就来创建控制3D精灵的行为,并把这些行为放到箭头精灵上,使箭头有控制3D精灵的能力。
(1)打开舞台窗口,用鼠标右键单击方向指向左的箭头精灵,在弹出的菜单中选择“Script”。
(2)在Script窗口中Director为我们自动建立了 On MouseUp 事件,在这个窗口输入下列代码:
On MouseUp
member("orb").model(1).rotate(0,-20,0)
控制"orb"角色成员以y轴为中心向左转20度
end
(3)在Script窗口的Cast Member Name栏中输入“rotate_left”, 关闭Script窗口。在Cast上就会多出一个名为:“rotate_left”的角色成员。
(4)用同样的方法,为方向指向右侧的箭头角色成员创建如下行为,并取名为rotate_right
On MouseUp
member("orb").model(1).rotate(0,20,0)
控制"orb"角色成员以y轴为中心向右转20度
end
提示:在创建行为时,建议你充分使用Scrpt窗口中Alphabetical Lingo和Categorized Lingo 这两个按钮,可省去你键入命令的时间,而且可以减少语法错误。
(5)打开Scort窗口,在帧脚本通道的第5帧处建立暂停行为。
(6)请你播放影片,然后分别单击两个箭头。影片中的三维球体是不是可以向左向右转?如果可以,就证明你成功了,如果不可以,请你检查一下是哪里出了问题,可以使用前文提到过的调试方法。
现在来解释一下我们刚才用到的Lingo命令。
member(whichCastmember).node(whichNode).rotate(xAngle,yAngle,zAngle{,relativeTo}),使3D模型在当前位置以指定的旋转轴为中心转动指定的角度。
member(whichCastmember) 将指定是哪一个3D角色成员要旋转,例子中指定的是“orb”;node(whichNode) 指定要转动的是那一个节点,例子中指定的是整个3D模型;如果3D模型是有多个节点组成,则要具体指定。
xAngle, yAngle, zAngle 指定是以哪一个旋转轴为中心转动多少度。例子中设定了第二个参数yAngle为20,所在在你单击箭头时,球会以Y轴为中心旋转20度,当这个是正数时,3D模型逆时针旋转,为负数时,3D模型顺时钟旋转。
这是Director8.5为3D功能添加的几百条3D Lingo命令中的一条。我再向你介绍一条,请你试试用下面的命令替换上面相应的命令,然后运行影片,分别单击两个箭头,看看有什么结果。
sprite(1).camera.translate(10,0,0)
这是改变camera位置的命令,使你能从不同的角度观看三维模型。

2.改变材质

我们在电脑屏幕上看到的这个3D模型是个灰白色的球体,就像在书本上到的一样,真是缺少美感。现在我们就来把它变成金黄色的,如果你有兴趣请往下跟我做。
(1)打Tool Palette(工具箱),在舞台上创建两个按钮,分别写上“变回来”和“变金色”并取名:“reset”和“golden”
(2)打开Paint窗口,画一个金黄色方块,并取名为“golden_Texture”。
(3)为“reset”按钮创建行为:
on mouseUp me
member("Orb").resetWorld()
end
(4)为“golden”按钮创建行为:
on mouseUp me
myTexture = member("orb").newTexture("golden_Texture ", #fromCastmember, member("golden_Texture"))
member("orb").model(1).shader.texture = myTexture
end
(5)测试影片,先单击“变回来”按钮,然后单击“变金色”看看球体是不是变成了金黄色的了?
现在来解释一下刚才在行为中我们用到的两个命令,第一个:member("Orb").resetWorld() 作用是使3D模型重新回来最最初的壮态。
member(whichCastmember).newTexture(newTextureName{,#typeIndicator, sourceObjectReference})命令是创建一个新的材质。
第一个参数(newTextureName)是设定材质的名称,它是一个字符串变量,所以在写程序时,要用双引号括起。
第二个在参数是指定材质的来源,是个可选项。如果指定时它可以是角色成员(#fromCastmember)也可是一个位图对象(#fromImageObject),当要指定一个位图对象时,你必须在Lingo中先定义才行。
结束语:Director是最佳的多媒创作工具,全世界有成千上万的开发人员选用这个工具。随着Director8.5中Web3D功能的加入,和借助该软件强大的脚本语言──Lingo和Shockwave的跨平台能力以及对Web媒体的支持,Director绝对有能力成为多媒体产品开发的念头羊,你现在加入到Director爱好者的行列一定大有前途。