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

如何循环已加载的SWF文件序列?求修改代码实现循环加载

实现SWF循环加载的解决方案

嘿,我明白你折腾了一整天的痛苦!要实现两个SWF循环加载其实不难,核心是把加载逻辑做成可复用的,然后在每个SWF加载完成后自动触发下一个的加载。我给你拆解下思路和修改方案:

核心思路

  1. 把需要循环的SWF路径统一存到一个数组里,方便管理和切换
  2. 用一个变量跟踪当前要加载的SWF索引,加载完成后切换到下一个索引(用取模运算实现循环)
  3. 封装加载逻辑成独立函数,每次加载完成后调用这个函数加载下一个SWF

修改后的完整代码示例

import com.greensock.*;
import com.greensock.loading.*;
import com.greensock.events.LoaderEvent;
import flash.events.Event;
import flash.utils.setTimeout;

// 存储要循环加载的SWF路径,顺序可以自己调整
var swfPaths:Array = ["swf1.swf", "swf2.swf"];
// 当前加载的SWF索引,初始从第一个开始
var currentLoadIndex:int = 0;
// 复用的SWFLoader实例,避免重复创建导致内存泄漏
var swfLoader:SWFLoader;

// 初始化加载流程
initSwfLoading();

function initSwfLoading():void {
    // 清理旧的loader实例和事件监听,防止内存泄漏
    if (swfLoader) {
        swfLoader.removeEventListener(LoaderEvent.COMPLETE, onSwfLoadComplete);
        swfLoader.removeEventListener(LoaderEvent.ERROR, onSwfLoadError);
        swfLoader.dispose();
    }

    // 创建新的SWFLoader实例,配置参数按需调整
    swfLoader = new SWFLoader(
        swfPaths[currentLoadIndex],
        {
            container: this,  // SWF加载后要添加到的容器
            autoPlay: true,   // 是否自动播放SWF
            centerRegistration: true  // 可选,让SWF注册点居中
        }
    );

    // 添加加载完成和错误监听
    swfLoader.addEventListener(LoaderEvent.COMPLETE, onSwfLoadComplete);
    swfLoader.addEventListener(LoaderEvent.ERROR, onSwfLoadError);
    
    // 开始加载
    swfLoader.load();
}

// SWF加载完成的回调
function onSwfLoadComplete(e:LoaderEvent):void {
    trace("当前SWF加载完成:" + swfPaths[currentLoadIndex]);
    
    // 切换到下一个要加载的SWF索引,取模运算实现循环
    currentLoadIndex = (currentLoadIndex + 1) % swfPaths.length;
    
    // 这里可以添加延迟再加载下一个,比如延迟2秒(2000毫秒),按需调整
    setTimeout(initSwfLoading, 2000);
    
    // 如果不需要延迟,直接调用initSwfLoading();
}

// 可选:处理加载错误的情况
function onSwfLoadError(e:LoaderEvent):void {
    trace("加载SWF失败:" + e.target.url);
    // 加载失败后也可以尝试加载下一个,避免流程中断
    currentLoadIndex = (currentLoadIndex + 1) % swfPaths.length;
    setTimeout(initSwfLoading, 1000);
}

关键细节说明

  • 复用SWFLoader:每次加载新SWF前清理旧实例和事件监听,避免内存泄漏和重复监听
  • 循环索引实现:(currentLoadIndex + 1) % swfPaths.length 这个取模运算可以让索引在0和1之间循环,哪怕以后你要加更多SWF,只需要在数组里添加路径即可
  • 延迟加载:用setTimeout可以让当前SWF播放一段时间后再加载下一个,如果你希望当前SWF播放完(比如SWF有固定时长),也可以监听SWF的Event.COMPLETE事件再触发下一次加载
  • 错误处理:添加错误监听可以避免某个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.25 08:35:52