You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:43:41