AS3技巧集:2.flash游戏进度存储--SharedObject类
本帖最后由 网雨霏霏 于 2019-3-17 22:11 编辑
【问题描述】: flash制作的小游戏,如果要存储游戏的进度,应当如何? 【情景概述】: flash(swf文件)在运行时,大多数数据都存储在内存中,一旦关闭swf文件,那么这些数据也同时从内存中被自动清除掉。 下一次再打开swf文件时,一切又从头开始了。因此,如果要实现进度读取的功能,就必须想办法把数据存储在Flash播放器外面。 ActionScript中,SharedObject类实现了该功能。 SharedObject有两种类型的共享对象-----本地和远程。本话集中讨论本地存储localsharedobjects(LSOs)。 LSOs很类似于浏览器中cookies,LSOs的功能也和cookies很类似,如存储用户登陆网站的用户名,这样不必每次登陆都要输入用户名了,不过LSOs的功能不仅限于此,它比cookies要强大的多(有兴趣的盆友可以百度一下)。 【解决方案】: 一、舞台上放置一个动态文本,设置实例名为usersValue 因为是用来存数数字的,所以通过“嵌入”按钮嵌入数字 二、舞台上放置一个按钮,用来给usersValue增加数据。按钮的实例名为addBtn 三、新建一个图层,准备写代码的。代码如下:
var lso:SharedObject = SharedObject.getLocal("justATest"); //初始化数据 //给舞台上的动态文本进行赋值 usersValue.text = "" + lso.data.chengji; //通过单击按钮对分数变量(usersValue)每次增加5分 addBtn.addEventListener(MouseEvent.CLICK, djhs); function djhs(event:MouseEvent):void 四、测试影片。开始的时候,显示的分数为30 每单击一次按钮,该值增加5分 关闭swf后,再重新测试影片。就会发现分数不再是30了。本地存储的目标达到 【本例源码下载】: 本帖隐藏的内容需要回复才可以浏览 使用flashCS5.5方可打开(flashCS6也可以) 【代码讲解】: 1、import flash.net.SharedObject; 该行是flashCS5.5软件自动加上的。当我们书写代码时,CS5.5会自动的将代码中需要导入的类写在最上面 2、var lso:SharedObject = SharedObject.getLocal("justATest"); 声明一个SharedObject对象lso【相当于声明一个变量,方便下面的操作。因此,lso的名字可以随便起】,并赋值。通过调用SharedObject的静态方法getLocal()来指定存储文件的文件名justATest ,这个名字是自己随便定义的。 3、if (lso.size == 0) SharedObject类有一个size属性,返回值就是外部文件的大小(单位是字节)【这个外部文件的类型一定是.sol类型(扩展名是.sol),这个外部文件的名字就是我们自定义的justATest。故而,该外部文件的全名就是justATest.sol。那么,该外部文件被存储在哪里呢?它被存储在C:\Documents and Settings\[当前用户名] \Application Data\Macromedia\Flash 通过一个if判断语句,来实现变量的初始化。若没有这个初始化,首次运行时,会显示undefined SharedObject类有一个data属性,该属性的类型是object,因此可以添加任何信息上去。我添加了一个名为chengji的属性,这个chengji无需事先定义,而是直接书写于此。我用chengji来存储成绩(数字)。 如果还有其他的变量,也按照相同的格式继续书写即可。比如说: lso.data.chengji = 30; 5、usersValue.text = "" + lso.data.chengji; 给舞台上的名为usersValue的动态文本进行赋值。则必须使用动态文本的text属性方可。由于该属性的类型是字符串,所以赋值号右方通过一个小技巧来进行赋值(即 通过一个空字符串""和连接符+跟上数字变量,即可实现数字转换成字符串的效果)。当然,我们还可以使用强行转换函数String: usersValue.text = String(lso.data.chengji); 这个效果和上面的效果完全等价。 6、addBtn.addEventListener(MouseEvent.CLICK, djhs); function djhs(event:MouseEvent):void 这是最经典的鼠标单击事件。我想通过单击按钮对分数变量(usersValue)每次增加5分
最近访问本帖者列表: | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||