Вызов функции из file1.as из file2.as? - PullRequest
0 голосов
/ 19 декабря 2009

Как я могу вызвать функцию в file1.as из file2.as?

вот код.

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

        import flash.display.Graphics;
        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.net.URLRequest;
        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://(.yada.yada.)/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();
        } 
    }
    }
}

в этом пакете я пытаюсь добавить работающую тень, а затем добавить работающий инфопузырь, а затем добавить работающий основной swf, а затем добавить close_button.swf, который загружает swf; однако, когда я пытаюсь добавить слушателя, я не могу сделать инфопузырь закрытым.

Ответы [ 2 ]

1 голос
/ 19 декабря 2009

Соглашение обычно допускает один файл .as для каждого класса, поэтому вам нужно иметь ссылку на экземпляр объекта этого класса внутри второго.

Тем не менее, нам нужна дополнительная информация, чтобы дать какой-либо полезный ответ.

0 голосов
/ 20 декабря 2009

Чтобы добавить к ответу Тегерила: помимо доступа к функциям внутри экземпляра класса, вы также можете (как в случае с утилитой) сделать статические функции. В этом случае вы можете вызвать метод следующим образом: ClassName.methodName (), без необходимости создания экземпляра .... мой случайный 2p.

...