如何循环已加载的SWF文件序列?求修改代码实现循环加载
实现SWF循环加载的解决方案
嘿,我明白你折腾了一整天的痛苦!要实现两个SWF循环加载其实不难,核心是把加载逻辑做成可复用的,然后在每个SWF加载完成后自动触发下一个的加载。我给你拆解下思路和修改方案:
核心思路
- 把需要循环的SWF路径统一存到一个数组里,方便管理和切换
- 用一个变量跟踪当前要加载的SWF索引,加载完成后切换到下一个索引(用取模运算实现循环)
- 封装加载逻辑成独立函数,每次加载完成后调用这个函数加载下一个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
相关产品推荐
相关产品推荐

