2011-02-25 68 views
0

我正在使用AS3在Flash CS4中工作。繼承文檔類時AS3錯誤1120

我有一個包含一個動態文本字段TextPage.fla文件(名稱:PAGETITLE頁)在舞臺上的實例。 在文檔類(TextPage)中,我根據某些XML設置PageTitle的文本。 這一切工作正常。

我還有一個FLA文件,SpecialTextPage.fla,而且也有在舞臺上的PageTitle動態文本字段。

我現在嘗試有從Textpage的SpecialTextPage文檔類繼承:

public class SpecialTextPage extends TextPage 
{ 
... 
} 

但我得到一個「1120:未定義的屬性的PageTitle的訪問。」嘗試發佈SpecialTextPage時出錯。 錯誤位置以TextPage.as的形式給出

作爲解決方法,我可以複製整個TextPage.as文件並在SpecialTextPage.as中添加我需要的額外內容,但是如果我可以的話,我顯然更喜歡它擴展它。

我的感覺,我不是很瞭解在舞臺上和文檔級閃存的對象之間的關係。

有人可以幫忙嗎?

回答

0

我得到了解決此問題是禁用自動聲明舞臺實例的方式。 (發佈設置 - >閃光標籤 - >取消選中「自動聲明舞臺實例」)

然後我需要在我的TextPage類中聲明PAGETITLE爲公共領域:

public class TextPage extends MovieClip 
{ 
    public var pageTitle:TextField; 
    ... 
} 
0

文檔類基本上是採取和傾倒的SWF然後在運行時執行的時間表的第一幀,因此具有獲得的一切在舞臺上像他們在你的類手寫屬性。

現在想象你創建你的SpecialTextPage一個變量,你叫我變種:INT;無論你做什麼,父母班將永遠不會訪問我(也不應該)。同樣,通過鏈接到文檔類的舞臺元素,父級將永遠不會訪問它們。

到影片剪輯延長類似雪碧,雪碧也沒辦法讓參考影片剪輯時間軸,因爲它沒有對它的認識。

但並非所有都丟失了!一個很好的方式來實現你的目標是要具備以下條件:

/* TextPage */ 
/* Parent Class */ 
/* ... */ 
public function TextPage() { 
    pageTitle.text = getTitle(); // This textfield would be the one in TextPage.fla 
} 

protected function getTitle():String { 
    return "All the text you could ever need in your title"; 
} 
/* ... */ 


/* SpecialTextPage */ 
/* Child */ 
/* ... */ 
public function SpecialTextPage() { 
    pageTitle.text = getTitle(); // This textfield would be in SpecialTextPage.fla 
} 
+0

謝謝您回答。我假設只要基類具有相同的名稱,基類就可以在子類中選擇字段。我沒有看到你提出的解決方案是如何工作的,因爲它仍然引用字段名稱,但我確實找到了適合我的解決方案 - 請參閱我對這個問題的回答。 – nicodenzl 2011-03-01 12:10:02