views:

76

answers:

2

How can I call a function in file1.as from file2.as?

here is the code.

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();
     } 
    }
    }
}

in this package i am attempting to add the shadow, which works, and then add the infobubble, which works, and then add a main swf which works, and then add a close_button.swf which it does load the swf; however, when I try to add the listener, I am unable to make the infobubble close back up.

+1  A: 

Convention typically allows for one .as file per class, so you would need to have a reference to an instantiated object of that class inside the second one.

That said, we need -way- more information to provide any kind of useful answer.

Tegeril
Are you familiar with ModestMaps? If so, I could easily explain, otherwise I will have to throw some code up so you can see. I am new to as3 and flex.
Phil
Haven't used it before, looks interesting.
Tegeril
I have added more info above
Phil
A: 

To add to Tegeril's answer: Aside from accessing the functions inside of an instantiated class, you could also (as is the case in a utility class), make the functions static. In this case you could call the method like so: ClassName.methodName(), without the need to instantiate.... my random 2p.

jeremym
could you expand on this possibly over messenger?
Phil
http://www.gskinner.com/blog/archives/2006/07/as3_singletons.html
Tegeril
F3 into (go to definition) mx.controls.Alert.show().
jeremym