2011-09-04 48 views
0

如果我有一個文檔類:調用類方法從另一個類在Flash

package { 
    import flash.display.MovieClip; 

    public class Main extends MovieClip { 
     public function Main() { 

     }    
     public function SomeRandomMethod():void { 

     } 
    } 
} 

我怎麼能說SomeRandomMethod從這裏:

package { 
    public class AnotherClass { 
     public function AnotherClass() { 

     }    
     public function AnotherRandomMethod():void { 
      /* I need to use SomeRandomMethod here */ 
     } 
    } 
} 

回答

3

有幾種方法來實現這一。一種方式是到文檔類的引用傳遞到其他類的構造函數:

package { 
    public class AnotherClass { 
     private var _doc:Main 
     public function AnotherClass(doc:Main) { 
      _doc = doc;   
     }    
     public function AnotherRandomMethod():void { 
      _doc.SomeRandomMethod(); 
     } 
    } 
} 

或函數本身

package { 
    public class AnotherClass { 
     public function AnotherClass() { 

     }    
     public function AnotherRandomMethod(doc:Main):void { 
      doc.SomeRandomMethod(); 
     } 
    } 
} 

您還可以通過聲明使用Singleton設計模式全局靜態變量併爲其分配文檔類。雖然單身人士被認爲是anti-pattern。例如:

package { 

     import flash.display.MovieClip; 

     public class Main extends MovieClip { 

      public static var instance:Main; 

      public function Main() { 
       instance = this; 
      }    
      public function SomeRandomMethod():void { 

      } 
     } 
} 

然後

package { 
    public class AnotherClass { 
     public function AnotherClass() { 

     }    
     public function AnotherRandomMethod():void { 
      Main.instance.AnotherRandomMethod(); 
     } 
    } 
} 

另一種方法是利用服務定位器模式(儘管一些視圖它作爲抗圖案太)。 http://gameprogrammingpatterns.com/service-locator.html

+0

請注意,函數本身代碼的傳遞引用是不正確的。它看起來像這樣:public function set functionToCall(value:Function):void {_functionToCall = void;} public function callFunction():void {_functionToCall();} –

+0

@Amy Blankenship我沒有試圖創建一個回調,相反,我的意思是這個類既可以作爲類成員變量存儲在構造函數中,也可以作爲函數本身的局部變量存儲。但是,是的,使用回調是另一種方式:) – Allan

+0

啊,我明白你的意思。我以爲你在說你可以傳遞一個函數自變量的引用,而不是將一個對類的引用傳遞給函數本身。 –