如何在 AS2 中获取加载的 swf 舞台的宽度/高度?
Posted
技术标签:
【中文标题】如何在 AS2 中获取加载的 swf 舞台的宽度/高度?【英文标题】:How can I get the width/height of a loaded swf's stage in AS2? 【发布时间】:2010-10-30 13:31:55 【问题描述】:我正在使用 MovieClipLoader 将外部 as2 swf 文件加载到我的 as2 flash 项目中,但我无法获取加载的 swf 的原始舞台大小。
当我运行以下代码时:
var popup:MovieClip = _root.createEmptyMovieClip("popup", 1);
var loader:MovieClipLoader = new MovieClipLoader();
var loadHandler:Object = new Object();
loader.addListener(loadHandler);
loader.loadClip(url, popup);
loadHandler.onLoadInit = function(mc:MovieClip)
trace(mc._width + ", " + mc._height);
当我真正想要的是加载的 swf 文件的舞台大小时,我得到了奇怪的宽度/高度值(mc._width=601.95,mc._height=261.15),在这种情况下我知道它是 300px x 250px。
任何建议表示赞赏! 谢谢
【问题讨论】:
【参考方案1】:这里的问题是加载的 swf 在加载到另一个 swf 时会丢失它的舞台大小。父级的阶段成为加载 swf 的阶段。当请求加载的 swf 的大小时,和你一样,它将返回第一帧整个表面的宽度和高度,而不是舞台的宽度和高度。
我过去解决此问题的方法是在加载的 swf 的第一帧上创建一个具有该 swf 舞台大小的影片剪辑实例。一旦加载了 swf,您就可以定位该 swf 并获取它的尺寸。当然,这仅在您对尝试加载的 swf 具有发布控制权时才有效。
用一个例子来说明这一点。在要加载的 swf 中,在第一帧上放置一个影片剪辑(例如矩形的影片剪辑)并将其命名为 stage_mc。当您现在加载 swf 时,您可以像这样定位那个 stage_mc 实例:
loadHandler.onLoadInit = function(mc:MovieClip)
trace(mc.stage_mc._width + ", " + mc.stage_mc._height);
【讨论】:
谢谢,很好的解决方案。我可以控制嵌入式 swf,所以我可以做到这一点。 :)【参考方案2】:在 AS3 中,您可以使用 loaderinfo 属性获取已加载 SWF 的高度:
// imports
import flash.display.LoaderInfo;
// loading code
var loader:Loader = new Loader();
loader.load(new URLRequest('some_swf.swf'));
loader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitHandler);
// listener
function loaderInitHandler(event:Event):void
var info:LoaderInfo = event.target as LoaderInfo;
trace('Loaded swf is ' + info.width + ' x ' + info.height + ' px');
// Loaded swf is 500 x 300 px
【讨论】:
【参考方案3】:试试
stage.width;
stage.height;
【讨论】:
这是不正确的。显示对象在作为外部 swf 动态加载时会丢失其舞台宽度和高度。正如卢克在他的回答中建议的那样,您最好的选择是添加一个不可见的电影剪辑。以上是关于如何在 AS2 中获取加载的 swf 舞台的宽度/高度?的主要内容,如果未能解决你的问题,请参考以下文章
将 AS2 SWF 加载到 AS3 SWF 中并在 URL 中传递变量
托管 AS2 swf 的 AS3 swf 如何共享同一个阵列?
在 AS3 中动态加载 AS2 文件 - 如何判断文件是不是为 AS2