2014-11-24 69 views
0

關於這個主題,網上有很多混淆,我是困惑的。在子類中訪問文檔類的變量

每當我嘗試將Main.as上的變量從另一個類中更改時,它都會失敗。 更糟的是?我記得在as3中過去做過這個。

public var mainVar:String = "CHANGE ME"; //on Main.as 

的東西類型我嘗試:

MovieClip(root).mainVar = "changed"; //error #1009 
parent.mainVar = "changed"; //error #1119 
this.parent.mainVar = "changed"; //error #1119 
Main..mainVar = "changed"; //error #1119 

我嘗試調用一個函數,並使用相同的語言得到了類似的結果。

預先感謝任何人試圖幫助。

已經有很多次了,它似乎是最好的想法將函數存儲在類中,並讓它們在main.as vars被調用後工作,但我永遠無法找到一個可靠的方法來做到這一點,並最終添加孩子並動態設置事件監聽器,並且只使用main.asp中的變量。做相反的事情很簡單,從main.as中更改存儲在類中的var。

+0

你可以把它的靜態,公共靜態var mainVar:String =「更改我」;然後使用Main.mainVar =「changed」; – Karmacon 2014-11-24 18:55:22

+0

你只需要正確地轉換它,以便編譯器知道什麼類型的對象。 'MovieClip'(你當前的根目錄)沒有這些屬性。但是'Main(root).mainVar'應該可以工作 – BadFeelingAboutThis 2014-11-24 18:58:37

+0

將其更改爲靜態工作。謝謝。 – randyHurd 2014-11-24 19:23:16

回答

0

您的「問題」是AS3是OOP,這意味着類可以單獨工作,並且需要連接它們。在處理更大的項目時,這樣做的舊方法(使用root)是絕對錯誤的。

有許多方法可以在類之間進行連接。首先,Main類的行爲與root相同(如果通過Flash IDE中的Properties將其定義爲基類)。所以,如果你創建一個類,是DisplayObject其添加主類(使用addChild();),那麼你就可以做很多像以前一樣:

MovieClip(parent).myFunction(); 

我不建議這樣做,而是更可靠的解決方案 - 主類傳遞給必須使用它的類:

var somethingCustom:MyClass = new MyClass(this); // inside Main.as 

然後在您的新創建的類此保存爲一個變量,並調用函數從中:

var _root:DisplayObject; 
public function MyClass(root:DisplayObject) { // MyClass.as 
    _root = root; 
    _root.callPublicFunction(); 
} 

有很多資源,可以幫助你理解類(這樣說,因爲這是他們應該工作正常的方式):

How Actionscript 3 Classes Work

http://www.untoldentertainment.com/blog/2009/08/25/tutorial-understanding-classes-in-as3-part-1/

+0

這並不適用於我,但我會查看您的鏈接以查看正在發生的事情。謝謝。 – randyHurd 2014-11-24 19:22:54