如何保存Flash游戏的SWF加载状态?重启后从上次结束处开始
实现上次关闭SWF的记忆与下次启动续载
嘿,这个需求其实很好解决,咱们可以借助Flash AS3里的**本地共享对象(SharedObject)**来搞定——这是专门用来在用户本地存储少量配置数据的工具,完全能满足记录最后加载SWF索引的需求。结合你现有的循环加载逻辑,只需要加两步:存储最后加载的索引,启动时读取这个索引作为起始点。
第一步:存储最后加载的SWF索引
每次成功加载完一个SWF后,把当前的索引值存到本地共享对象里。这样程序关闭后,数据还会留在用户的本地存储中。
// 创建/获取本地共享对象,名字可以自定义,比如"SWFLoaderHistory" private var swfHistory:SharedObject = SharedObject.getLocal("SWFLoaderHistory"); // 保存当前加载的SWF索引的函数 private function saveLastSwfIndex(currentIndex:int):void { // 把索引存入共享对象的data属性 swfHistory.data.lastIndex = currentIndex; // 调用flush()确保数据写入本地,避免丢失 var flushStatus:String = swfHistory.flush(); // 可选:处理存储失败的情况(比如用户禁用了本地存储) if (flushStatus == SharedObjectFlushStatus.PENDING) { trace("需要用户授权存储,请允许!"); } }
第二步:启动时读取存储的索引作为起始点
在程序初始化加载器的时候,先检查本地共享对象里有没有保存的索引。如果有,就用这个索引作为循环的起始count值;如果没有(比如第一次启动),就默认从0开始。
private function initLoader():void { var startIndex:int = 0; // 检查是否有保存的上次索引 if (swfHistory.data.hasOwnProperty("lastIndex")) { startIndex = swfHistory.data.lastIndex; // 额外处理:如果SWF列表有更新(新增/删除),防止索引越界 if (startIndex < 0 || startIndex >= swfs.length) { startIndex = 0; } } // 把起始索引赋值给你原来的count变量 count = startIndex; // 触发第一次加载 loadNextSwf(); }
结合原有循环逻辑
在你原来的loadNextSwf()函数里,每次加载完成后(比如SWF加载成功的回调里),调用saveLastSwfIndex(count),然后再让count自增。这样每次切换SWF都会更新本地存储的索引,确保下次启动能拿到最后一次的状态。
举个简单的回调示例:
private function onSwfLoaded(event:Event):void { // 这里是你的SWF加载成功后的逻辑 // ... // 保存当前索引 saveLastSwfIndex(count); // count自增,准备下一次加载 count++; }
这样改造后,每次关闭程序再启动,加载器就会自动从上次最后加载的那个SWF开始循环啦~
内容的提问来源于stack exchange,提问作者user9689503
相关产品推荐
相关产品推荐

