addEventListener到loader?或加载瑞士法郎?

时间:2009-12-19 21:02:07

标签: flex actionscript-3 flex4 classloader loader

我正在使用以下代码加载外部swf文件:

  //add close button
  var reqButton:URLRequest = new URLRequest(btn_close);
  var loader2:Loader = new Loader();
  loader2.load(reqButton);
  addChild(loader2);

  loader2.addEventListener(MouseEvent.CLICK, closeInfoBubble);

  function closeInfoBubble(event:MouseEvent):void
  {
  infoClip.removeMarkerObject(infoBubble)
  infoBubble = null
  }

以下是该.as文件的完整代码

package com.modestmaps
{
        import com.modestmaps.overlays.MarkerClip;

        import flash.display.Graphics;
        import flash.net.URLRequest;
        import flash.display.Loader;
        import flash.display.Shape;
        import flash.display.Sprite;
        import flash.filters.BlurFilter;
        import flash.geom.Matrix;
        import flash.geom.Rectangle;
        import flash.text.TextField;
        //import mx.core.Application;
        import mx.core.Application;
        import flash.events.MouseEvent;


public class InfoBubble extends Sprite
{
    private var btn_close:String = "http://www.cvcmaps.com/SabineParish/media/close_button.swf";
    public var textField:TextField;
    public var background:Shape;
    public var shadow:Shape;
    public var infoClip:MarkerClip;

    protected var map:InfoMap;
    //var infoClip:MarkerClip;
    public var infoBubble:InfoBubble;
    public function InfoBubble(urlLink:String)
    {
        //the name of my markers are set to the links of the swf files in which I want to load into the infobubble
        this.name = urlLink;
        this.mouseEnabled = false;
        this.mouseChildren = true;
        this.buttonMode=false;

        shadow = new Shape();
        shadow.filters = [ new BlurFilter(16, 16) ];
        shadow.transform.matrix = new Matrix(1, 0, -0.5, 0.5, 0, 0);   
        addChild(shadow);

        background = new Shape();
        addChild(background);

        textField = new TextField();
        textField.selectable = false;
        //the infobubble is still sized according to the textField.width and height
        //I don't know how to get the size of the loaded swf
        textField.width = textField.textWidth+432+4;
        textField.height = textField.textHeight+288+4;

        //add main swf
        var request:URLRequest = new URLRequest(urlLink);
        var loader:Loader = new Loader();
        loader.load(request);
        addChild(loader);

        //position the main swf
        //current measurements of swf file w432 h288
        loader.y = -288 - 37;
        loader.x = mx.core.FlexGlobals.topLevelApplication.LBloaderX;

        //add close button
        var reqButton:URLRequest = new URLRequest(btn_close);
        var loader2:Loader = new Loader();
        loader2.load(reqButton);
        addChild(loader2);

        loader2.addEventListener(MouseEvent.CLICK, closeInfoBubble);

        function closeInfoBubble(event:MouseEvent):void
        {
        infoClip.removeMarkerObject(infoBubble)
        infoBubble = null
        }
        //position the closebutton swf
        //current measurements of closebutton swf file w18 h18
        loader2.y = -286 - 37;
        loader2.x = mx.core.FlexGlobals.topLevelApplication.LBloader2X;

        // remember that things in marker clips are positioned with (0,0) at the given location
        textField.y = -textField.height - 35;
        textField.x = -10;

        //I need to find out how to detect the width and height of the swf file loaded into loader2
        //instead of the size of the textField
        var rect:Rectangle = textField.getRect(this);

        // get your graph paper ready, here's a "speech bubble"
        background.graphics.beginFill(0x12345);
        shadow.graphics.beginFill(0x000000);

        for each (var g:Graphics in [ background.graphics, shadow.graphics ] ) {
            g.moveTo(rect.left, rect.top);
            g.lineTo(rect.right, rect.top);
            g.lineTo(rect.right, rect.bottom);
            g.lineTo(rect.left+15, rect.bottom);
            g.lineTo(rect.left+10, rect.bottom+15);
            g.lineTo(rect.left+5, rect.bottom);
            g.lineTo(rect.left, rect.bottom);
            g.lineTo(rect.left, rect.top);
            g.endFill();
        } 
    }
    }
}

问题1: 一旦加载程序加载我的图像,然后我点击它,就什么也没发生。我应该将EventListener添加到加载器还是其他什么东西?

问题2: 如何检测加载器中swf文件的高度和宽度?

2 个答案:

答案 0 :(得分:1)

要检测何时加载swf,请使用

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, itemLoaded);

你可以听其他事件,但你必须使用loader的“contentLoaderInfo”属性,因为它引用了调度事件的对象。

希望这有帮助!

答案 1 :(得分:0)

1)将MouseEvent添加到加载器没有问题,在某个地方必须有另一个问题是在同一个域上加载了图像? 父母是否正在吃所有事件或者将mouseChildren设置为false?

2)对于内容的维度,一旦加载就可以

loader2.content.widthloader2.content.height