FLASH MX(FLASH6)的闪亮登场,又给了闪客们一个晕倒的理由,因为她的新面孔让我们激动不已。
一.先从MX的新功能说起
进入MX开发界面后,点击菜单条的Help=Samples,就会打开一篇网页,叶子里的这些Sample能让我们感受到MX的新功能。接着,在叶子里点击"Feature highlight: Load images"链接。我们在这个动画里看到了5张海洋生物的图片(路人甲:看到了又怎么样?),与以往所不同的是:这5张图片并没有和这个swf文件编译在一起(路人乙:一定是"loadMovie"的外部swf,少见多怪),也不是调用的外部swf,而是"loadMovie"的5张外部的jpg图象文件。正是因为MX对"loadMovie"命令进行了扩充,才使我有幸写这篇教程^_^。
翻开MX的在线帮助,可以找出MX对"loadMovie"的详细说明,其中"Parameters"部分的第一句"url The absolute or relative URL of the SWF file or JPEG file to be loaded."更是画龙点睛地指出了:如今的"loadMovie"不但可以load外部的swf,而且还能load外部的jpg图象文件。在jpg格式图象在网络上大行其道的今天,不能不说这是一个极好的消息。
再回过头来看看MX对这个"海洋生物"动画例子的Description:"This sample demonstrates how you can load images from a drive or server into a movie at runtime. There are no images in the library of the source file for this sample."是的,这个"海洋生物"的图象浏览器所"loadMovie"的都是本地"drive"的jpg图象,而且jpg图象的文件名列表都已经提前定义好了。
由此产生个小问题:如果已经定义好的文件名列表里有一个"daliang.jpg"文件,但是在某一天,这个文件在"drive or server"里不幸消失,再"loadMovie"的时候,岂不会出错,那怎么办?!:~(,别哭,咱们一起想办法:)
(路人饼:要是每次"loadMovie"的时候,都能动态地生成一个当前的文件名列表就万事OK了.大亮:没错)每一次运行动画的时候,都能动态生成一个当前的jpg图象文件名列表,就可以解决上述问题。
但是,在本地"drive"里动态生成一个文件名列表却并非易事,不过,我们从这段"海洋生物"动画的Description还能知道:MX的"loadMovie"也可以从server端动态load图象到一个"Movie Chip"里。于是,我们又会想到:利用一些"server"端的语言,就可以很容易地动态生成一个"server"端的jpg图象文件名列表。
二.构思
综上所述,我们知道:这套MX图象浏览器将会在网络上运行,而且在"server"端要有一个提供动态生成"server"端jpg图象文件名列表的后台程序,这些jpg图象文件也要放置在"server"端。
每当运行这个MX图象浏览器的时候,它总会用"loadVariables"的方法请求SERVER返回一个"server"端的当前图象文件列表,然后MX图象浏览器就可以依次"loadMovie"这些jpg的图象文件了。
我们将会选择ASP来作为后台支持,因为用它来遍历"server"端文件非常方便。
为了使这个教程便于理解,所以把后台的ASP文件和所有的jpg图象文件全部放置在"server"端的同一目录下。
这就是整套程序的构思,下面我们将会具体实现这套MX图象浏览器。
三.具体实现
1.ASP部分
首先从后台的ASP入手,因为我们将要开发的这套MX图象浏览器会通过ASP来得知"server"端当前目录的jpg文件清单。下面的这个imagebrowse.asp文件就可以实现动态生成jpg文件名列表的功能:
<%
dim strPathInfo,strPhysicalPath
'获取这个asp文件的文件名
strPathInfo = Request.ServerVariables("SCRIPT_NAME")
'得到这个asp文件在服务器上的绝对路径
strphysicalpath = server.MapPath(strpathinfo)
dim objFso,objFile,objFileItem,objFolder,objFolderContents
'建立一个FileSystemObject对象
set objFso = createobject("scripting.filesystemobject")
'返回这个asp文件的文件对象
set objfile = objFso.GetFile(strphysicalpath)
'返回这个asp文件所在的目录名
set objfolder = objfile.parentfolder
'返回这个asp文件所在目录中的所有文件的File对象的Files集合
set objfoldercontents = objfolder.files
dim count
count = 0
'下面这个for内就是遍历当前目录下所有文件的全过程
for each objfileitem in objfoldercontents
'因为我们只需要"*.jpg"的文件
'所以每遇到扩展名后4个字节为".jpg"的文件
'便使count计数器加1,并把这个文件输出到列表中
if lcase(right(obj