【问题标题】:AS3 SWFs Loading External Files; Change default locationAS3 SWF 加载外部文件;更改默认位置
【发布时间】:2024-01-07 17:47:01
【问题描述】:

如果我有一个 SWF 和一个 XML 文件位于同一个文件夹中,有没有办法让加载器使用 SWF 的位置作为其加载外部文件的起点(而不是 HTML 文件哪个 SWF 播放)?我们正在复制一组网站,其中一些路径具有唯一的页面代码,但如果 SWF 只在自己的文件夹中查找,它们就可以正常运行。 :)

谢谢! 克里斯

【问题讨论】:

    标签: actionscript-3 file flash external loader


    【解决方案1】:

    可以试试这个。

    var base:String = unescape( LoaderInfo( this.root.loaderInfo ).url ); // url of SWF
    
    // now we need to remove the SWF name from the url
    var lastSlash:uint = Math.max( this.base.lastIndexOf( "\\" ), this.base.lastIndexOf( "/" ) );
    return( base.substr( 0, lastSlash + 1 ) );
    

    这将获取 SWF 的 url,遍历它并找到最后一个“\”或“/”以确定 swf 文件名的开始位置,并将基数设置为 SWF 的路径。

    然后将所有相对的URLRequests 从

    var url:URLRequest = new URLRequest( "assets/blah/blah/img.png" );
    

    var url:URLRequest = new URLRequest( base + "assets/blah/blah/img.png" );
    

    这将是我将添加为您的应用程序类的静态属性的内容,以便您只访问一个字符串,而不会重复执行任何强制转换或 unicode 转义或任何操作。只需在启动时运行一次并将其作为静态变量抛出,因为它永远不会改变。

    (我确实对此进行了测试,并且至少在本地可以正常工作。但是,我看不出它与来自网络的 URL 的行为有何不同的原因)

    【讨论】:

    • 使用 lastIndexOf() 而不是循环遍历所有字符(向前!)会更有效。
    • 谢谢Apocalyptic,我会告诉你进展如何!
    • @AmyBlankenship 我从来没有听说过lastIndexOf()。我将更新我的答案以现在使用它。感谢您指出这一点。刚刚意识到我也应该向后循环。所以感谢您指出这一点。非常低效(但如果只运行一次就不会引起关注)
    • 完美解决方案。谢谢你们!