代码之家  ›  专栏  ›  技术社区  ›  loopj

如何在AS2中获取加载的swf舞台的宽度/高度?

  •  2
  • loopj  · 技术社区  · 17 年前

    我正在使用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。

    任何建议感谢! 谢谢

    3 回复  |  直到 17 年前
        1
  •  3
  •   Luke    17 年前

    这里的问题是,当加载到另一个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);
    }
    
        2
  •  0
  •   Dave Stewart    16 年前

    在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
  •  -1
  •   Elijah Glover    17 年前

    尝试

    stage.width; 
    stage.height;
    
    推荐文章