2011-04-24 42 views
10

我有一個ActionScript類庫項目「BG」,它鏈接到類BGClass。 BG包含一個實例名稱爲「bg」的Sprite,同樣BGClass也有一個公共bg屬性。所以班級看起來是這樣的:1152:名稱空間中存在與繼承定義衝突的公共

public class BGCass extends Base { 

    public var bg:Sprite; 

    public function BGCass() { 
     bg.width = 200 
    } 
} 

一切工作正常。但是,如果我希望將公共BG移動到這樣的基類,我會得到錯誤。

public class BGCass extends Base { 
    public function BGCass() { 
     bg.width = 200 
    } 
} 

public class Base extends Sprite { 

    public var bg:Sprite; 

    public function Base() { 
    } 
} 

我已經嘗試在Base中使用getter setters並在BGClass中重寫它們,但仍然出現錯誤。這是Flash中的錯誤嗎?有沒有一個乾淨的解決方案,或者我需要創建某種代理變量來最終獲得bg到Base?我知道在Flash中關閉「自動聲明階段實例」將消除錯誤,但我需要繼續爲設計師開發。任何解決方案

+0

所以你有一個叫BG的影片剪輯?它的基類是BGClass? BGClass擴展基地?並且BG影片剪輯包含實例名稱爲「bg」的影片剪輯?我只是爲了確保我的結構是正確的,我認爲可以使用一些修改,並修改您選擇的名稱。 – Taurayi 2011-04-24 11:46:19

回答

8

您有幾個選項。

  1. 將您的「bg」變量或「bg」階段實例重命名爲其他內容以使它們不匹配。

  2. 如果您轉到文件>發佈設置...> Flash選項卡,然後單擊Actionscript 3.0旁邊的「設置...」按鈕,您會看到一個標籤爲「Automatically declare stage instances」 。如果您禁用此選項,那麼您看到的錯誤將會消失,儘管您可能會看到其他一些錯誤。

如果使用選項2,我相信如果您保留它們的名稱相同,變量將自動填充參考舞臺實例。

一些背景:當您使用基類創建庫項目時,Flash會在幕後創建一個新類以擴展您選擇的類。默認情況下,Flash被配置爲爲該類提供一組成員變量,這些變量與您在創作環境中放置在MovieClip中的子級相匹配。

+0

我給BG中的Sprite實例名稱爲「背景」(而不是「bg」),然後我在BGClass中設置了bg = background。馬虎,但它似乎是唯一的解決方案。「自動聲明階段實例」不適用於我,因爲我需要我的腳本工作天氣「自動聲明階段實例」是否設置。它看起來像一個錯誤,因爲如果bg是在主類中定義的,則Flash不會給出錯誤。只有在super中定義bg時纔會出現該錯誤。 – Sunny 2011-04-25 04:40:29

+0

-1這個答案是完全錯誤的。很快就會提出一個答案。 – 2011-04-29 17:38:29

+2

奇怪,因爲他的回答直接超出了你的意思,表明他的問題是通過遵循我的建議來解決的,雖然他還沒有正式接受我的答案。 – 2011-05-01 00:17:33

-1

你忘記做的是實例化bg精靈。你所做的只是把它轉換成雪碧。
基本上,你在做什麼是試圖如果實例,你不會有問題

public class Base extends Sprite { 

    public var bg:Sprite; 

    public function Base() { 
     this.bg = new Sprite(); 
    } 
} 

也與您的代碼,您張貼不出錯來訪問空精靈

var bg:Sprite; 
bg.width // bg is null at this point 

var bg:Sprite; 
bg = new Sprite() 
//or 
var bg:Sprite = new Sprite() 

所以不涉及您發佈的錯誤。所以這只是你的問題的一半,如果你做這個改變後仍然得到錯誤讓我知道。

+3

它不需要實例化,因爲它已經存在於舞臺上。 – Ethan 2011-04-29 19:39:33

0

從擴展的MovieClip中刪除BG。 BG從基本MovieClip中擴展到MovieClip。

相關問題