Flex:无法调整外部加载的SWF内容的大小

时间:2011-05-11 11:54:06

标签: flex actionscript-3 flash resize swfloader

我有一个应用程序,我尝试加载外部SWF。所以,我们有:

  • 我的应用:舞台的尺寸为768x1280。 ScaleMode = EXACT_FIT。
  • 外部SWF:这是另一个应用程序,其阶段是:800x600。 ScaleMode = EXACT_FIT。

问题是外部SWF不会修改其大小,尽管我应用“scaleX,scaleY”,更改其宽度等等。 我还尝试将其插入到Canvas容器中(如“如何调整外部SWF大小以适应容器?”)但它并没有解决我的问题。 有趣的代码是当我的应用程序加载外部SWF时:

private function onLoadedApp( evt:Event ):void{ 
     stage.scaleMode = StageScaleMode.EXACT_FIT;    
     trace("Loading Application..");           
     var loaderInfo:LoaderInfo = evt.target as LoaderInfo;    
     loaderInfo.removeEventListener( Event.COMPLETE, onLoadedApp);   
     trace(loaderInfo.loader.content);           
     var swfApplication:SpriteUIComponent = new SpriteUIComponent(evt.target.loader.content );           
     if( SWFContainer.width < swfApplication.explicitWidth ){               
            var coef:Number = SWFContainer.width/swfApplication.explicitWidth;  
            swfApplication.scaleX = coef; 
            swfApplication.scaleY = swfApplication.scaleX;            
      }                
       SWFContainer.addElement(swfApplication);
}

我也试过通过SWFLoader来做,但是虽然我添加了“scaleContent”参数,但是external.swf的内容并没有改变它的原始大小。

我得到的视觉效果:

外部SWF加载在合适的位置,“看起来”是320x240暗淡。但它的宽度有点裁剪,因为如果我拉伸Flash Player,我会看到外部swf的其余部分。此外,虽然我缩小/拉伸Flash Player,但外部SWF永远不会调整大小。它总是保持固定(如果我追踪其尺寸,我总是得到800x600,虽然我在视觉上看到320x240) - 如果我增加主应用程序的舞台宽度,这个小剪辑消失。

讨论:

我知道舞台的原始尺寸是800,这比我的应用程序的原始阶段(768)要大,但我认为,当我进行调整大小时,外部SWF的舞台必须安装在容器中。它适合,但没有看到外部SWF的一部分。就像Flash Player记得外部SWF Stage的宽度大于我应用程序的宽度......

提前致谢。

3 个答案:

答案 0 :(得分:0)

即使scaleContent设置为“true”,您仍需要为SWFLoader控件设置精确的高度和宽度,以便它甚至可以尝试调整内部SWF的大小。所有scaleContent都不是以常规尺寸或拉伸尺寸显示SWF,而是在需要时对SWF进行升级,如果不是,只需对其进行缩放以保留原始SWF的比例。

答案 1 :(得分:0)

我认为问题不在于您的ScaleMode。每个Flash播放器只能有一个舞台。 “外部”SWF的“stage”属性在将“应用程序”SWF添加到显示列表后引用该阶段。如果SWF已加载但未添加到显示列表,则加载的SWF的“stage”属性将等于“null”。在外部SWF中设置stage scaleMode将不会决定它在加载到另一个SWF后如何缩放。

此外,您可能正在调整SWFContainer的大小,而不是SWF本身......这就是为什么SWF宽度和高度属性始终为800x600。我不确定这是否是你所要求的,但根据我的理解,你可能需要创建一个舞台调整大小事件监听器。

答案 2 :(得分:0)

您是否尝试过对“外部SWF”使用缩放效果?

Scale Effect