【问题标题】:Flex: Impossible to resize the external loaded SWF's contentFlex:无法调整外部加载的 SWF 内容的大小
【发布时间】:2011-05-11 11:54:05
【问题描述】:

我有一个尝试加载外部 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来做,但是external.swf的内容并没有改变它原来的大小,虽然我添加了“scaleContent”参数。

我得到的视觉结果:

外部 SWF 已加载到合适的位置,并且“似乎”具有 320x240 的暗度。但它的宽度有点被裁剪,因为如果我拉伸 Flash Player,我可以看到外部 swf 舞台的其余部分。此外,尽管我缩小/拉伸了 Flash Player,但外部 SWF 从未调整大小。它始终保持固定(如果我跟踪它的尺寸,我总是得到 800x600,尽管我在视觉上看到 320x240)- 如果我增加主应用程序的舞台宽度,这个小剪辑就会消失。

讨论:

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

提前致谢。

【问题讨论】:

  • 我刚刚用一段代码更改了描述。谢谢。
  • 嗨!您找到问题的解决方案了吗?我目前遇到完全相同的问题:)

标签: apache-flex actionscript-3 flash resize swfloader


【解决方案1】:

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

【讨论】:

  • 是的,但这不起作用:
  • 尝试使用 maxWidth 和 maxHeight。
【解决方案2】:

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

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

【讨论】:

  • 好的,但是我如何才能直接调整外部 SWF 的大小?我用过Canvas、SWFLoader...关于resize 事件。我认为这个事件是由 Flash Player 在其窗口更改其大小并且我有 StageScaleMode.NO_SCALE 时调度的,但我仍然不知道如何调整大小。我会在这种方式上尝试一些方法。谢谢。
【解决方案3】:

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

Scale Effect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多