我有一个应用程序,我尝试加载外部SWF。所以,我们有:
问题是外部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的宽度大于我应用程序的宽度......
提前致谢。
答案 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”使用缩放效果?