猫岛建设者-用SharedObject存储对象

2019年2月12日19:32:35 发表评论浏览:50

上个星期特别长,在学校里呆了整整7天。星期三在电脑教室玩《猫岛建设者》玩到一半,无奈swf文件没法保存进度。惋惜啊,当时经验值都一千八百多了呢。要怪只能怪自己,没有弄出个保存的功能来。一回家,就在琢磨怎么写。看书上说SharedObject是个好东西,可以当作cookie来用。欣欣好开心啊,虽然cookie不能吃…… 

忙活了一早上加一下午,终于可以保存游戏进度了。运行swf的时候,会询问是否允许保存数据,然后会创建一个sol后缀的文件,里面装的可是纯天然原生态的AS数据喔。它有个默认的存放路径C:\Documents and Settings\TCXX(用户名)\Application Data\Macromedia\Flash Player\#SharedObjects。 

为了方便重复使用,欣欣特地抽离出代码编成一个叫作Sos的类(SharedObject缩写是SO嘛)。先讲一下欣欣写的这个东东吧。

var so:SharedObject = SharedObject.getLocal("meaoData");

欣欣的Sos类有个唯一属性——so,它是最核心的变量,类型是SharedObject。getLocal用于取得sol文件,如果不存在将被创建。SharedObject有个非常厉害的属性叫data,因为是Object类,所以可以用“so.data.属性”的办法直接赋值,比如:

so.data.author = "tcxx";

但是,一开始欣欣在赋值的时候顺手写成了so.data.author:String=”tcxx”,于是悲壮地编译错误了……略去空空如也的构造函数,直接讲Sos类的几个方法吧,2个公开方法read()和write(),1个私有方法save()。

function read() { if (so.data.status=="saved") { Main.gameEngine.experience = so.data.experience; Main.gameEngine.gameMap.itemList = so.data.soMap; Main.gameEngine.presentItem.presentItemList = so.data.item; //trace("sos loaded!"); }} read()的功能是在游戏一开始读入上次保存的进度数据。引入if语句的判断是因为如果是第一次玩《猫岛建设者》,so.data便无法实例化,导致编译错误。protected function save() { so.data.soDate = new Date(); so.data.status = "saved"; //trace("sos saved!"); so.data.experience = Main.gameEngine.experience; so.data.soMap = Main.gameEngine.gameMap.itemList; so.data.item = Main.gameEngine.presentItem.presentItemList;} save()的功能是在游戏结束时保存进度。变量status标记为saved,这样下次玩的时候用read()就可以读入进度了。function write() { save(); var rs = so.flush();} write()的功能是在游戏进行的同时保存数据。flush方法可以更新sol文件。  在与fla文件绑定的文档类里,定义sos:Sos=new Sos()就OK啦。 附:欣欣Sos类全部代码 package { import flash.net.SharedObject; /** * ... * @author TCXX */ public class Sos { var so:SharedObject = SharedObject.getLocal("meaoData"); function Sos() { } function read() { if (so.data.status=="saved") { Main.gameEngine.experience = so.data.experience; Main.gameEngine.gameMap.itemList = so.data.soMap; Main.gameEngine.presentItem.presentItemList = so.data.item; trace("sos loaded!"); } } protected function save() { so.data.soDate = new Date(); so.data.status = "saved"; trace("sos saved!"); so.data.experience = Main.gameEngine.experience; so.data.soMap = Main.gameEngine.gameMap.itemList; so.data.item = Main.gameEngine.presentItem.presentItemList; } function write() { save(); var rs = so.flush(); } } }

原文链接:https://tcxx.info/diary/139.html

  • 微信(WeChat)
  • 多少不重要
  • weinxin
  • 支付宝(Alipay)
  • 有鼓励就好
  • weinxin
voice 站点
秋冬款男士牛仔裤修身小脚松紧腰系带韩版百搭潮流新款原色男裤子
精油一件代发,法国Florihana 荷荷巴油
兰芝 多效洁面乳
Combantrin澳大利亚驱虫巧克力安全高效美味成人宝宝打虫药

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: