2012-02-04 66 views
0

我一直在四處搜尋試圖解決這個問題。出現了各種各樣的想法,比如dispatchEvent等,但似乎沒有一個明確,簡單的做法。Flash AS3從一個類中調用一個函數在一個單獨的類中

我想要做的是從一個類中調用一個函數,但在與我的文檔類相同的文件夾中。 具體而言,我想'產生'一個對象,並從我的Main.as.在該對象的類中運行一個函數。 我現在的片段如下:

在Main.as:

var object:class_Object = new class_Object(); 
object.spawn(); 
addChild(object); 

的菌種功能是內class_Object公共職能,但是當我嘗試運行它,我得到的錯誤:「錯誤#1006:產卵是不是一個函數」 如果我拿出'object.spawn();'代碼它添加對象很好。

我必須失去一些東西很明顯,但無法弄清楚什麼

感謝

編輯

固定的問題,我忘了指定的類路徑我的圖書館對象的AS鏈接,我以爲我做到了!

回答

4

您將該方法標記爲static。這意味着它屬於該類的本身而不是實例

要調用方法的定義,你會說:

class_Object.spawn()

然而,這未必是何意,但很難沒有看到實施的話。從其定義中刪除static關鍵字會將其附加到實例,並且將按照您所描述的方式進行訪問。

請參閱here瞭解有關該主題的Adobe文檔。


爲了回答您的評論,一個簡單的方法來思考它是一個「類」是一個藍圖,共創「實例」。

所以,當你說new class_Object()你告訴「藍圖」來「構建」一個藍圖的新實例。在藍圖的方面,您可以定義應該可用於實例(或實例方法)的方法/屬性。此外,您還可以定義「藍圖」本身(或靜態方法)可用的方法/屬性。

因此,使用的Car

public class Car { 

    public function startEngine():void { 
     // This is an instance method, it will be available to 
     // any instance of a car, or new Car(); 

     // Note: "this" in this context refers to the current instance of the car 
     // that the method is being called from 
    } 

    public static function compare(Car car1, Car car2):bool { 
     // This method belongs to the blueprint of a car 

     // Note: "this" doesn't make any sense in this context, because we 
     // aren't talking about a particular instance. 
    } 
} 

經典的例子再比如說:

var mercedes:Car = new Car(); 
var bmw:Car = new Car(); 

mercedes.startEngine(); // call an instance method. notice we call it from a particular instance of a car. 
Car.compare(mercedes, bmw); // call an static method. notice we call it from the class of Car. 

當你從另一個類「擴展」,你是「借」從另一個類的功能和添加/替換您自己的功能。但只要你有一個實例,如果它是一個「公開」的方法,那麼它將從該實例可用的地方在外部可用。我不知道這是否有助於回答你的評論。

+0

哦,我看到裏面的方法,我沒有意識到靜態attatched它純粹的類,清理,截至感謝。但是,如果我理解正確,他們是兩個獨立的班級,而不是一個班級的班級。所以我有擴展MovieClip的Main類和擴展Sprite的我的Object類。這隻會在Main文件擴展目標文件時起作用?謝謝您的幫助! – Artharos 2012-02-04 21:31:43

+0

@Artharos更新了我的答案,希望能夠覆蓋您的評論。 – 2012-02-05 00:51:51

+0

這絕對有幫助,我現在對課程有了更好的理解,所以謝謝!然而,我像上面那樣啓動並調用了我的對象類的一個實例,並像上面那樣調用了它的一個方法,但它卻拋出了錯誤。我不知道是否重要,我設置變量並從Enter_Frame函數內調用方法,不應該這樣做。哦,如果我嘗試調用一個靜態方法,就像你做的那樣,我得到錯誤:'1061:通過靜態類型的引用調用可能的未定義方法'方法'非常感謝您的耐心! – Artharos 2012-02-05 10:25:20

0

你需要讓你的class_Object公共

package my.package{ 
    public class class_Object(){ 
     public function class_Object(){ 
      //constructor 
     } 

     public function spawn():void{ 
       //spawn code 
     } 

    } 
} 



var classObject:class_Object = new class_Object(); 
classObject.spawn(); 
相關問題