免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享

AS3技巧集:2.flash游戏进度存储--SharedObject类

本文来自:★flash之路-flash技术交流★ 转帖请注明出处! 作者:网雨霏霏 您是第3634个浏览者

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
flashroad友情提示:
“点评”不是“回帖”!
本帖最后由 网雨霏霏 于 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

三、新建一个图层,准备写代码的。代码如下:


import flash.net.SharedObject;

var lso:SharedObject = SharedObject.getLocal("justATest");

//初始化数据
if (lso.size == 0)
{
lso.data.chengji = 30;
}

//给舞台上的动态文本进行赋值

usersValue.text = "" + lso.data.chengji;

//通过单击按钮对分数变量(usersValue)每次增加5分

addBtn.addEventListener(MouseEvent.CLICK, djhs);

function djhs(event:MouseEvent):void
{
lso.data.chengji +=  5;
usersValue.text = "" + lso.data.chengji;
}




四、测试影片。开始的时候,显示的分数为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
Player\#SharedObjects\[ 随机字符]\[swf文件的文件名]\,随机字符目录命名是为了安全考虑。一些恶意的swf文件可能试图猜测sharedobject(共享对象)的名称或目录,以便从文件系统中读取LSO,进而提升访问权限。因此必须把路径随机化,这样猜路径几乎是不太可能了】

通过一个if判断语句,来实现变量的初始化。若没有这个初始化,首次运行时,会显示undefined

4、lso.data.chengji = 30;

SharedObject类有一个data属性,该属性的类型是object,因此可以添加任何信息上去。我添加了一个名为chengji的属性,这个chengji无需事先定义,而是直接书写于此。我用chengji来存储成绩(数字)。

如果还有其他的变量,也按照相同的格式继续书写即可。比如说:

lso.data.chengji = 30;
lso.data.mingzi = "网雨霏霏";
lso.data.sz = ["电视机","电冰箱","电脑","电吹风"];

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
{
lso.data.chengji +=  5;
usersValue.text = "" + lso.data.chengji;
}

这是最经典的鼠标单击事件。我想通过单击按钮对分数变量(usersValue)每次增加5分

您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

友情提示:单击下列任意一个表情,即可瞬间自动回复本帖!

好贴......
郁闷......
开心......
擦汗......
鄙视......
狂怒
谢谢
爱你呦
拜托了
嗯嗯
OMG
求关注
伤心......
无奈.....
无奈.....
无奈.....
无奈.....
无奈.....
哈哈哈
NO
OK
what
我来了

最近访问本帖者列表:

flashroad
访问时间:2020-02-13 07:56
吃饭的厨子
访问时间:2020-02-11 21:48
网雨霏霏
访问时间:2019-08-13 12:33
旧城时光
访问时间:2019-04-20 11:15

打赏

取消

感谢您的支持,我会继续努力的!

扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by 爱秀代码,分享从这里开始,精彩与您同在

点评
B Color Smilies

您还可以输入:个字符
X

X

求关注.....
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

TOP

 

B Color Image Link Quote Code Smilies
高级模式 | 发新话题

您需要登录后才可以回帖 登录|立即注册

快速
返回顶部
返回首页