关于Flash中本地数据存取的几种方法

2009-09-29 08:16付达杰
中国教育信息化·基础教育 2009年9期

付达杰

摘 要:在交互动画设计中,对数据的存取十分重要。本文对Flash中本地数据存取的方法进行了深入的讨论,并通过实例比较了各种方法的使用特点。

关键词:Flash;本地数据;LoadVars;数据存取

中图分类号:G433 文献标识码:B 文章编号:1673-8454(2009)18-0060-03

引言

从1996年Flash1.0正式命名开始,到今年Adobe 官方宣布Flash CS4的推出,Flash技术及其软件版本的更新已经成为互联网时代最为引人注目的焦点之一,成为网络、多媒体、影视、广告、教育等领域的技术新宠,可以说交互式矢量动画特点是其得以广泛应用的看家本领。Flash交互动画是通过一系列Action Script代码来实现的,其中,对外部数据的操作是实现交互的重要技术,最基本的数据操作就是数据的读取和保存,读取也称为调用。如Flash多媒体课件中常常需调用外部文本教案、文本试题、保存试题答案等。以下对Flash存取本地数据的几种方法进行比较(代码调试版本为Flash8.0)。

一、本地数据的读取

作为多媒体创作环境,Flash常调用的本地数据包括各种多媒体文件如文本、图片、声音、动画以及脚本文件等。Flash可以通过帧、按钮、影片剪辑来实现对这些本地数据的调用。现以文本文件调用为例来分析本地数据读取策略,本地文本文件的调用往往是通过动态文本框来实现的。

1.使用loadVariables()函数调用本地文本文件及其特点

格式:public loadVariables(url:String, [method:String]) : Void

loadVariables()从外部文件读取数据并设置影片剪辑中变量的值。外部文件可以是 Macromedia ColdFusion 生成的文本文件、CGI 脚本、Active Server Page (ASP)、PHP 脚本或任何其它格式正确的文本文件。此文件可以包含任意数量的变量。使用此方法调用文本时最关键的是文本文件开头要以Flash中的动态文本框的变量名开头,如wt=""这样的形式(wt为动态文本框的变量名),且要和编辑的Flash文档放在同一目录下。具体可参照如下设计步骤:

①新建一Flash文档,并在场景中添加一个动态文本,给动态文本一个变量名,如wt;

②继续在场景中添加一个按钮用于调用文本;

③调用按钮上添加AS:

on(release){//释放鼠标后执行如下代码;

loadVariables("wt.txt",wt);//调用和与Flash处于同一目录下的wt.txt文本文件到动态文本wt中;

System.useCodepage=true;//使外部文件的中文字符能够正确显示;

}

若要将文本加载到特定级别,可以使用 loadVariablesNum()。loadVariables()函数调用方法虽然简单实用,却有一些不足。其特点主要表现在三个方面:一是代码简单,仅需动态文本设定一个变量名,节约了系统资源;二是Flash文件只能调用与其在同一目录下的外部文本,限制了调用的灵活性;三是对文本要求严格,文本的开头必须以动态文本框变量名开始,影响了文本的编辑。因此,在频繁大规模调用外部文本时,这种方法不可取。

2.使用LoadVars类调用本地文本文件及其特点

LoadVars 类是 loadVariables() 函数的替代方法,用于在 Flash 应用程序和服务器之间传输变量。[1]LoadVars.onLoad 处理函数来确保应用程序在加载数据之时(而不是之前)运行。此方法对文本文件的具体位置没有限制,使得其更具有灵活性。在调用按钮时添加如下代码:

①新建一Flash文档,并在场景中添加一个动态文本,动态文本实例名称为wd;

②继续在场景中添加一个按钮,调用文本;

③调用按钮上添加AS:

on(release){//释放鼠标后执行如下代码;

System.useCodepage = true; //使外部文件的中文字符能够正确显示;

var wen_txt:LoadVars = new LoadVars();//创建一个LoadVars对象的实例,实例名为wen_txt;

wen_txt.load("text/jiao/11.txt");载入位于text/jiao/11.txt目录下的11.txt文件;

wen_txt.onData = function(wen:String) {//将文本数据传递给字符串wen;

wd.text = wen;// 在载入操作完成时在名wd实例中文本框中显示文本;

}

}

作为loadVariables() 函数的替代方法,LoadVars类可以发送那些可使应用程序更加有效的特定变量,而不是所有变量。它具有两个显著特点:一是以动态文本框实例text属性值显示文本,无需定义动态文本框变量;二是突破了loadVariables()函数对于外部文本的内容约束和位置限制,可以调用本机上任何位置的任何文本。

以上两种方法,常常都需结合动态文本框来调用外部文本,都有一个共同的缺陷,即调入文本无法保持原有的格式。总体上说,较之loadVariables() 函数,LoadVars类虽然在代码上要复杂,但由于对外部文本不设限,因此调用效率相对来说比较高。

二、本地数据的保存

以前在Flash中常用fscommond来保存本地外部文本文件,自FlashMX始,出于对安全因素的考虑,Macromedia舍弃了这种数据保存方法。但是,仍然可以用以下三种方法实现对本地外部文本文件的保存。

1.使用MMsavve()函数保存外部文本及其特点

格式:MMSave(textString, txtFileName)

其中参数textString表示字符串,用来记录要保存的数据内容,参数txtFileName表示被保存的文本文件名。此函数是Flash专门用来存盘的函数,出于对安全因素的考虑,Macromedia隐藏了它。默认的存储路径是:Application DataMacromediaFlash MXConfiguration;对于Windows2000(XP)用户来说,默认的存储路径是:Documents and Settings[User]Application DataMacromediaFlash MXConfiguration。

示例:在场景中建立一个动态文本(变量名为name)并设置一个按钮(实例名为send_btn)。然后在第一帧加入下面的代码:

send_btn.onRelease = function() {

MMSave(name, "../../../../../../data.txt");

};

按“Ctrl+Enter”测试即可将输入的姓名保存在C盘的data.txt中,但函数只能用在编辑器的调试播放下,在IE或者其他播放器中就会失效。

2.使用SharedObject(共享对象)保存外部数据及其特点

SharedObject 类用于在用户计算机上读取和存储有限的数据量。共享对象提供永久贮存在用户计算机上的对象之间的实时数据共享。本地共享对象与浏览器 cookie 类似。可以把它看作小型的数据库,能够存储任何Flash支持的数据类型,比如数字、字符串、数组和对象等等,常在游戏中用来存储用户高分。SharedObject按存放位置可分为本地型(存在客户端)和远程型(存在服务器端)。本地型共享对象的扩展名为.sol。对于Windows98(ME)用户来说,默认的存储路径是:Application DataMacromediaFlash Player服务器域名路径Flash电影文件名.swf;对于Windows2000(XP)用户来说,默认的存储路径是:Documents and Settings[User]Application DataMacromediaFlash Player服务器域名路径Flash电影文件名.swf。[2] 本地型共享对象的扩展名为.sol。

根据上述示例,将第一帧代码更改为:

var user_so = sharedobject.getlocal("user"); // 建立共享对象的参照,user为共享对象名;

send_btn.onRelease = function() {

with (user_so) {

data.name = name; //用data属性和flush方法保存用户输入的用户名

flush();

}

};

运行之后,即可发现数据被存放到user.sol文件中。这种方法成功的关键因素是getLocal()方法、flush()方法和data属性。

* flush([minDiskSpace:Number]) : Object,将本地永久共享对象立即写入本地文件。

* getLocal(name:String, [localPath:String], [secure:Boolean]) : SharedObject,返回对本地永久共享对象的引用,该对象只可用于当前客户端。

* data:Object,分配给对象的 data 属性的属性集合;可以共享和/或存储这些属性。

这种方法虽然突破了MMsavve()方法只能在调试播放下方起作用的局限,实现了在IE和播放器下的保存效果,但本地型共享对象仍然只能将数据保存在默认路径下,而且扩展名只能是.sol。另外,默认情况下,Flash在本地只能保存100k大小的永久性共享对象,不过可以通过设置来调整其保存容量。

3.结合JavaScript实现数据保存

利用fscommond命令将Flash获得的数据传递到JavaScript中,使用JavaScript网页编程实现本地数据的存储。这个方法的本质上是Flash5与JavaScript技术的组合,其中最为关键的一步是以Flash5的格式发布Flash电影和html文件和使用FileSystemObject(文件系统对象)完成数据写入。因此,虽然这种方法没有文本保存位置的局限,但严格来讲,它实际上已经不是纯粹的Flash技术了。

以上三种方法,各有所长,应视具体情况而作出选择。MMsavve()方法适合于调试,SharedObject方法适合于游戏开发,而结合JavaScript的方法则相对来说功能最强,适应面更广,实现成本也最大。

三、结束语

总体上讲,Flash对外部数据的存取缺乏更多简单有效的方式,这也是其作为网络动画制作工具高安全性要求所带来的局限性。但在特殊需要的时候,仍然可以利用以上几种方法进行本机数据的存取。值得注意的是,在方法选择上务必要注意不同方法的特点及适合环境。

参考文献:

[1] Adode官方网站[DB/OL].http://www.adobe.com

[2] 刘栋.Flashmx2004中利用SharedObject存取本地磁盘数据[J].电脑学习.2006,(4):35-60.

(编辑:隗爽)