在ActionScript中,使用外部SWF填充阶段

时间:2010-01-27 22:24:09

标签: flex actionscript flash mxml

编辑:我已经解决了这个问题,只需重新编写基于MXML的应用程序并使用SWFLoader组件即可获得所需的效果,而无需重新加载。因此,这个问题不再是我的问题,但我将其留待参考。


在MXML中,我可以轻松获得所需的效果:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  layout="absolute">
  <mx:SWFLoader width="100%" height="100%"
    source="3298.swf"/>
</mx:Application>

看起来像这样:

(external SWF fills stage) http://www.ubuntu-pics.de/bild/40036/screenshot_028_MSd0UZ.png

我是ActionScript的新手,所以我不知道如何在没有MXML的情况下复制它。这是相关的课程:

package {
  import flash.net.URLRequest;
  import flash.display.DisplayObject;
  import flash.display.Loader;
  import flash.events.Event;

  public class Asset extends Loader {
    public var id:int;
    private var preview:Preview;
    private var swfContent:DisplayObject;
    public var zone:int;

    public function Asset(data:Object) {
      id = data.id;
      zone = data.zone;
    }

    public function loadInto(previewToSet:Preview):void {
      preview = previewToSet;
      var request:URLRequest = new URLRequest(url);
      contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
      load(request);
    }

    private function onCompleteHandler(loadEvent:Event):void {
      swfContent = loadEvent.currentTarget.content;
      swfContent.scaleX = 1;
      swfContent.scaleY = 1;
      preview.addChild(swfContent);
    }

    private function get url():String {
      return id + ".swf";
    }
  }
}

loadInto函数中,我给Asset一个sprite生存,然后开始加载。通过将scaleXscaleY分别设置为1,我可以非常接近,但我无法弄清楚为什么它不在顶部,以及为什么SWF只是有点大。

(external swf slightly off) http://www.ubuntu-pics.de/bild/40040/screenshot_029_4pHKNI.png

如何在纯ActionScript中复制MXML的100%高度和宽度?它可行吗?如果没有,我在纯MXML中有一个后备应用程序,但我的实现涉及每次我想添加或删除其中任何一个时加载SWF ...它并不完美。如果我能弄清楚尺寸问题,我更喜欢这种类型的实现。

谢谢!

3 个答案:

答案 0 :(得分:0)

使用resize event中的stage object,每当resize event被解雇时,都会根据以下内容调整内容:

stage.addEventListener(Event.RESIZE, onResize);

public function onResize(e:Event):void{
 swfContent.width=stage.stageWidth;
 swfContent.height=stage.stageHeight;
}

答案 1 :(得分:0)

尝试添加

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

到班级的开头然后调整大小并将加载的图像放到

loadedimage.x = loadedimage.y = 0;
loadedimage.width = stage.stageWidth;
loadedimage.height = stage.stageHeight;

答案 2 :(得分:0)

这种声音就像你的瑞士法郎的锚点并不恰好在它的角落里。尝试抵消代码中的x和y位置,或者更好的是,修改swf以使锚点位于角落?