2009-12-19 2 views
0

Как я могу вызвать функцию в file1.as из файла file2.as?вызов функции в 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(); 
     } 
    } 
    } 
} 

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

+0

Litle more explain: Что вы пытаетесь сделать? – Patrick

ответ

1

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

Сказанное, нам нужна дополнительная информация для предоставления любого полезного ответа.

+0

Вы знакомы с ModestMaps? Если так, я мог бы легко объяснить, иначе мне придется бросить код, чтобы вы могли видеть. Я новичок в as3 и flex. – Phil

+0

Не использовал его раньше, выглядит интересно. – Aaron

+0

Я добавил дополнительную информацию выше – Phil

0

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

+0

, не могли бы вы расширить этот возможно посыльный? – Phil

+0

http://www.gskinner.com/blog/archives/2006/07/as3_singletons.html – Aaron

+0

F3 в (перейти к определению) mx.controls.Alert.show(). – jeremym

Смежные вопросы