在 ActionScript 中,使用外部 SWF 填充舞台

Posted

技术标签:

【中文标题】在 ActionScript 中,使用外部 SWF 填充舞台【英文标题】:In ActionScript, fill stage with external SWF 【发布时间】:2011-01-10 04:21:09 【问题描述】:

编辑:我已经通过简单地修改基于 MXML 的应用程序并使用 SWFLoader 组件来获得所需的效果来解决这个问题,而无需任何重新加载。因此,这个问题对我来说不再是问题,但我将其留作参考。


在MXML中,我可以很容易地得到想要的效果:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  layout="absolute">
  <mx:SWFLoader  
    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 提供了一个可以继续生存的精灵,它开始加载。我可以通过将scaleXscaleY 分别设置为 1 来非常接近,但我无法弄清楚为什么它不在顶部,以及为什么 SWF 有点大。

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

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

谢谢!

【问题讨论】:

请注意:目前正在考虑仅在 ActionScript 本身中使用 MX SWFLoader 组件。不知道为什么一开始我没有想到。 【参考方案1】:

使用stage object 中的resize event 并在每次触发resize event 时根据该调整内容大小:

stage.addEventListener(Event.RESIZE, onResize);

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

【讨论】:

【参考方案2】:

尝试添加

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

到你的类的开始,然后调整大小并将加载的图像放置到

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

【讨论】:

这让我更接近:ubuntu-pics.de/bild/40045/screenshot_030_P8eB2D.png - 我认为 SWF 可能有一些鬼鬼祟祟的事情(我不是原作者),因为我记得在反编译它时有实际数据存储在其中,而不仅仅是一个形状。我会回去看看那里能不能找到更有用的东西。 不,我能挑出的 SWF 没有什么特别奇怪的地方。嗯。【参考方案3】:

这听起来像是你的 swf 的锚点并不完全在它的角落。尝试在代码中偏移 x 和 y 位置,或者更好的是,修改 swf 以使锚点位于角落?

【讨论】:

以上是关于在 ActionScript 中,使用外部 SWF 填充舞台的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 从外部swf调用函数

ActionScript 3 从其他域加载外部swf

ActionScript 3 AS3在运行时加载和访问外部SWF中的字体

ActionScript 3 AS3从URL加载外部SWF

ActionScript 3 AS3加载和显示外部SWF文件

flash & Actionscript3 - 将对象传递给外部 swf