Director 可以说是多媒体界最主流的著作工具,国内从事多媒体编程的人也大多数使用该软件。但是很可惜的是它的易用性使得很大一部分人在较低的层次上用它制作多媒体作品。我觉得全世界的
director 制作人员大概按创作方式可分为三类:
1:Art Director: 这些人大多数是美术人员,不懂得编程。所以他们使用 director 的方式就是采用时间线作动画的方式,他们的作品可能包含成百上千帧,完全是二维动画的制作方法,可能有一些简单的交互(可以使用
behavior 实现)。
2:Computer Programer: 这些人原先就是某一类程序员,他们精通 c,c++ 语言,转到 director 编程大多是冲着
director 的 编程语言 LINGO 来的。他们的制作方式就是 使用 Lingo ,你很少在他们的作品中看见很多帧, 通常只有很少几个帧
,有时候就是单帧。但是他们写的 Lingo 代码可能有 成千上万行。
3:Multimedia producer: 就是以上两种人的结合。
国内的情况很特殊,大多数人是属于第一类的。第二类的人很少(因为大多数程序员不喜欢太高级的 script 语言编程)。Director
使用的好坏很大程度上取决于 LINGO 语言的掌握,但是作品制作的好坏却取决于创意和美术制作。所以将来的多媒体创作其实更多需要第三类人。
这就要求美术人员要懂得更多的 Director 技术方面知识。在此根据我解决 director 制作中所碰到的问题的经验,给大家常见的问题作一个解答。
问题1:为什么 director 总是报告“where is ......” (找不到链接的媒体文件,如 mov, wav 文件)
解答:
很多人以连接方式导入的媒体文件(例如 quicktime ,wav,aiff,avi 等文件)在变换了路径后会出现找不到媒体文件的情况。
解决方法很简单,那就是使用 the searchPaths 这个系统属性列表。
the searchPaths 告诉 director 到那里去找媒体文件。通常我们将媒体文件以一种层次结构方式组织在光盘上,例如
projector 文件放在光盘的根目录下,而声音文件放在 sounds 目录下,视频文件放在 video 目录下。
当 director 加载媒体文件的时候,它会首先查看媒体文件最初的连接地址,如果没有找到该文件,它会接着在电影文件的当前目录下查找该媒体文件,如果还是没有找到,它就遍历
the searchPaths 中的所有路径。the searchPaths 中的每一个项目就是一个路径。
因此解决方法就是在每个 director 电影文件的 movie script 中加入这个 handle
on startMovie
append the searchPaths, the moviePath & "video"
append the searchPaths, the moviePath & "sounds"
end
the moviePath 返回当前电影文件的路径名,例如如果光盘是 D 盘,电影文件放在光盘的根目录下,那么 the moviePath
就返回 D:\, the moviePath 和 "video" 结合就成了 D:\video,将合并后的路径通过
append 附加在 the searchPaths 后,director 就知道到什么地方查找该文件了。
问题2:我希望 director 电影文件放在硬盘上(考虑到速度问题),而媒体文件放在光盘上,我该如何作?
解答:
这种做法在国外是很普遍的,因为 director 制作的文件通常都非常庞大,打包后的文件 2-3 兆是很普通的事情,但是放在光盘上运行的确很慢。国内制作的光盘大多数将电影文件放在光盘上,再在光盘的根目录下放一个
autorun.inf ,当用户插入光盘后(通常是噩梦的开始),就进入 director 电影文件的漫长的加载过程。因此国外的这种做法很值得推荐,但是并不是所有人都喜欢这种做法,因为它需要制作一个安装程序将director
电影文件安装到用户的硬盘上,对于用户来说,这种做法不如 autorun 直接。
解决方法同样涉及上面的路径问题,只是你必须将判断用户的光驱符号,然后将它和子目录结合为新路径。然后附加到 the searchPaths
属性列表。
具体做法如下:
1:在你的光盘中放入一个很特殊的文件(名字尽量不会和很可能出现在任何盘的根目录下的文件重名)
比如你公司的名字,(mycorporation.txt)
2: 编写判断光驱盘符号的函数
具体函数如下:
on CheckDrive uniquefile
repeat with i = 67 to 90 -- 字母 A 到 Z 的循环
set drive = numTochar( i ) -- 将 A 到 Z 的 ASCII 码转换为字符
set thisPath = string(drive & ":\"& uniquefile)
set myFile = new(xtra "fileio") -- 创建 FileIO Xtra 的实例
openFile(myFile, thisPath, 1) -- 打开指定的文件
if status(myfile) = 0 then -- 如果打开文件成功返回 0
set myFile = 0 -- 从内存中删除该实例的指针并返回 drive&":"
exit
end if
end repeat
set myFile = 0 -- 从内存中删除该实例的指针
alert "请插入正确的光盘"
end
3:编写你的 movie script 脚本
on startMovie
myCD = CheckDrive("mycorporaion.txt")
append the searchPath, myCD & "\video"
append the searchPath, myCD & "\sounds"
end
这样你就可以将光盘上放置媒体文件,而把 director 电影文件放在硬盘上,而不必担心会出现问题了。
问题3: 如何在 Director 中使用 pdf 文档?
解答:
这个问题的解决方法涉及将来很多类似问题的解决,那就是如何在 Director 中使用 active X 的技术。很奇怪的是这种技术在
Director 中的使用并不多,似乎没有受到重视。我最近在我制作的一张光盘中使用了这种技术。实际证明这种技术很有效。当然你得在程序的开头编写提示用户安装Acrobat
Reader 的代码)
Director 很多功能需要通过购买第三方的 Xtra 实现,通常这些 Xtra 都很贵。比如使用 pdf Xtra.但是避开购买
pdf 的 XTRA ,通过使用 Active X,你完全可以将 Acrobat Reader 的所有功能集成到 director
中来,因为免费发放的 Acrobat Reader 中包含了一个 Active X 控件。在安装完毕后这个控件自动注册。
具体解决方法如下:
1:安装 Acrobat Reader(为了自动注册 Acrobat Reader Active X 控件)。
2:在 Director 中将 Acrobat Reader Active X 控件。
选择 Insert >Control >ActiveX.
然后在出现的对话框中选择 “Acrobat Control for ActiveX"。
见图一。
单击 OK 按钮后会进入第二个 Acrobat Reader Active X 属性对话框(见图 二)。
它的第一个属性是 SRC。
如果你知道 PDF 文件的路径可以直接在该对话框中指定。它是绝对路径,在此控件的src属性中不能指定相对路径。单击 OK 按钮后则关闭属性对话框,这个时候你已经将
activex 控件插入到 cast 角色库中,将这个刚刚插入的 activex 控件从角色库中拖放到舞台上。你可以尽量拉伸这个
sprite 到你希望的大小。
如果当前的 director 电影出于播放状态,你就会看到你指定的 PDF 出现在舞台上。是不是很简单。
但是这种方法不实用,除非你用硬盘播放你的演示程序。通常我们希望使用相对路径(相对电影文件所在的目录下的子目录中放置 PDF 文档)。那么你不比在此控件的src属性中设置任何参数。你可以使用
Lingo 设置该控件的src属性。具体程序如下
在 mouseUp 或 enterFrame 等句柄中编写如下的程序。
on mouseUp me
sprite(1).src = the moviePath & "MyPDF.pdf" --假设
Acrobat 控件放在 1 通道中
end
on exitframe me
sprite(1).src = the moviePath & "MyPDF.pdf"
end
将如上的句柄放在Acrobat 控件所在 sprite 的 sprite 脚本中。
问题四:如何在 Director 中播放 mpeg 文件?
解答:
在 Director 中播放 mpeg 文件的方法主要有三种:
1:使用 MCI,这种方法和 Director 的集成不好,不建议采用。
2:使用 Xtra,与 Director 集成好,但是需要额外购买。
3:使用 Active X ,与 Director 集成,不需要额外购买。
我在这里介绍的方法是第三种。
其实这个解决方法和上面读入 PDF 的方法相同,在设置和编程上稍有出入。
具体解决方法如下:
1:在 Director 中将 Acrobat Reader Active X 控件。
选择 Insert >Control >ActiveX.
然后在出现的对话框中选择 “ActiveMovieControl Object"。
见图三。
单击 OK 按钮后会进入 第二个 ActiveMovie Active X 属性对话框(见图四)。
滚动属性标签中的属性直到 属性Filename名出现。单击 ”按钮“...",然后单击"browse"
按钮去选择要播放的 AVI 或 MPG 文件。将此控件插入 Director 中。
将这个刚刚插入的 activex控件从角色库中拖放到舞台上。你可以尽量拉伸这个 sprite 到你希望的大小。
注:新的版本可能不包含 按钮“...",你可以使用 LINGO 此属性
set the filename of member "xxx" to "1.mpg"
点击 Director 中的播放按钮,你就可以看到 Mpeg 文件的播放了。
你也可以通过 LINGO 编写程序访问此控件的方法,例如 RUN 是这个控件的一个方法,
你可以将在一个按钮中附上下面的代码
on mouseUp
run (sprite 1) --假设此控件所在通道为 1
end
注:ActiveX 视频对象总是直接写屏幕的,它的 direct to stage 总是设置的,这使得它超越 Director
通道的安排次序,总是在最上面的。
问题 5:什么是 Shockwave, 什么是 Flash,为什么 Shockwave 比 Flash 提供更高的帧速率?
解答:
1:shockwave 和 Flash 是 Macromedia 提供的两种网上媒体流播放技术。Flash 是一种网上矢量动画技术并带有一定的交互编程功能。Shockwave
是一种更加复杂的播放技术,由于它提供了强大的,可扩展的脚本引擎,使得它可以制作聊天室,操作 HTML,解析 XML 2文档,控制适量图形,两者都是流媒体技术。但是
Flash 启动非常的快,而 shockwave 启动没有 Flash 快。Flash 使用 Flash 软件制作,文件后缀名是
swf (shockwave flash format),Shockwave 是用 Director 制作,文件后缀名是 dcr。
2:
帧速率决定了媒体可以播放的最高速率,shockwave 和 flash 的实际播放速率通常由于播放所需的计算量而达不到指定的播放率,二者的内部渲染引擎不同,shockwave
的帧速率通常在30-60 之间,而 Flash 的帧速率在 7-12 之间。Shockwave 本质上使用一个高性能的点阵复合引擎,而
Flash 实质上是一个实时适量到点阵的渲染引擎。通常矢量到点阵的渲染要比简单的将点阵图像复合更加耗时,这就是为什么 Shockwave
比 Flash 提供更高的帧速率。
一句话:Flash 是一个矢量动画软件 ,而 Director 制作的 shockwave 更多是基于点阵的动画。
其实这是一个很简单的事实,但是非常令人费解的是很多人并不清楚这些。致使很多人在 Flash 中嵌入大量的位图,使得文件很大。也有的人总觉得
Flash 比 shockwave 慢,却不明白原因。
以上是我在使用 Director 制作光盘和网上 shockwave 多媒体游戏的一些心得。我在这里抛砖引玉,希望结识更多和我一样喜欢
Director 的朋友。我的 e-mail 地址是 eiffel_q@yeah.net, 我的网址: http://www.matrixfox.com/mulder/
(多媒体 X 档案)
《5D多媒体》提供 莫特探员/文