2015-05-08 82 views
1

我在我的庫中有一個對象,名爲BottleBottle由「Glass」和「Cap」實例組成。我的書架中還有兩個符號,分別叫做CapGlass對象內的對象

當我點擊Bottle的帽子時,它說這個物品是Cap,當我點擊玻璃時,它說它是Glass型。這些對象中的每一個都有基類flash.display.MovieClip

然而,在我的代碼,當我做:

var bottleOnStage:Bottle = new Bottle(); 
addChild(bottleOnStage); 
var newColor:uint = 0x00ff00; 
var newColorTransform:ColorTransform = new ColorTransform(); 
newColorTransform.color = newColor; 
bottleOnStage.Glass.transform.colorTransform = newColorTransform; 

我得到這個錯誤:

TypeError: Error #1010: A term is undefined and has no properties. at MethodInfo-1()

上午我訪問了玻璃性質錯了嗎?是否因爲我沒有創建Glass實例?我很困惑對象內的對象如何在Flash中工作。

編輯

var cap:Cap; 
var glass:Glass; 

上面是什麼在我的Bottle.as文件。在我Main.as文件我有:

var bottleOnStage:Bottle = new Bottle(); 
bottleOnStage.cap = new Cap(); 
bottleOnStage.glass = new Glass(); 
addChild(bottleOnStage); 
var newColor:uint = 0x00ff00; 
var newColorTransform:ColorTransform = new ColorTransform(); 
newColorTransform.color = newColor; 
bottleOnStage.glass.transform.colorTransform = newColorTransform; 

當我運行此代碼,發生在瓶子的「玻璃」部分沒有變化。爲什麼是這樣?我知道這是這條線;我追蹤並調試了所有其他線條,並且我追蹤的顏色是正確的等。當我使用addChild將「cap」和「bottle」添加到「bottleOnStage」時,我得到這兩個符號的重複,所以這顯然不是這樣。基本上,我如何修改舞臺上的「帽子」和「玻璃」?

+0

您的瓶子類是否鏈接到FlashPro中的庫對象? – BadFeelingAboutThis

回答

1

它看起來像你正在混淆類與實例。實例名稱不能與類名相同(在同一範圍內)。

Glass是你的課。如果您的瓶子類中有名稱爲「Glass」的變量,則需要對其進行重命名,以便與類名稱Glass不混淆。

bottleOnStage.glassInstanceName.transform.colorTransform = newColorTransform; 

有一個小竅門,以避免這種情況最好的做法總是讓你的實例名稱以小寫字母開頭,始終讓你的類名以大寫字母開頭。 (這也有助於在大多數編碼應用程序中的代碼突出顯示以及Stack Overflow中的代碼突出顯示 - 請注意您的大寫項目是如何突出顯示的?)

就您的錯誤而言,您可能沒有實際的對象可變的。

執行以下操作:

var myGlass:Glass; 

並不能使一個對象(該值爲NULL),它只是定義了一個佔位符。您需要使用new關鍵字來實例化,以創建實際的對象。

var myGlass:Glass = new Glass(); 

現在,您將在該變量中擁有一個對象。


編輯

爲了解決您的編輯,聽起來像你可能想是這樣的:

package { 
    public class Bottle extends Sprite { 
     public var cap:Cap; 
     public var glass:Glass; 

     //this is a constructor function (same name as the class), it gets run when you instantiate with the new keyword. so calling `new Bottle()` will run this method: 
     public function Bottle():void { 
      cap = new Cap(); 
      glass = new Glass(); 

      addChild(cap); //you want these to be children of this bottle, not Main 
      addChild(glass); 
     } 
    } 
} 

這樣使得所有封裝,並增加了蓋和玻璃作爲子女瓶子。所以瓶子是主要的孩子,帽子和玻璃杯是兒童或瓶子。

+0

我試圖完全不使用時間軸。我意識到我很困惑類和實例。有沒有什麼辦法只使用代碼來訪問Glass實例和瓶子實例的瓶蓋?我必須修改這些符號的類嗎? –

+0

您只需確保命名不含糊。所以給你的變種名稱以外的東西'玻璃'。 – BadFeelingAboutThis

+0

如果Cap變量與Cap類具有相同的名稱,則還需要對Cap變量執行相同的操作。 – BadFeelingAboutThis

0

什麼是玻璃瓶屬性的名稱是什麼?

,如果您有例如:

public class Bottle { 

    public var glass : Glass; 

} 

您可以通過訪問玻璃:

var bottle : Bottle = new Bottle(); 
bottle.glass = new Glass(); 

玻璃是類。 bottle.glass是Bottle類的屬性「glass」。

希望它有幫助。

+0

謝謝!這正是我想我需要做的事情,但直到大約2分鐘前,才意識到Flash實際上爲您的符號創建了類。 –

+0

歡迎您。試着總是用一個名字來命名一個類的屬性。 I.E:Glass是類名。玻璃是屬性。 MobileBanking是類名。 mobileBanking是屬性。那樣你永遠不會有這個問題。對不起英語不好。 –