2009-02-26 136 views
0

有人可以幫我找出爲什麼我得到錯誤消息「訪問未定義的屬性:removeChild(goBack)」在以下剪切?as3訪問未定義的屬性?

順便說一句,這是閃存CS4

function nameOfFunction() { 

var goBack:backButton_mc = new backButton_mc(); 

goBack.x = 10; 

goBack.y = 700; 

goBack.back_text.text = myXML.*[buildingName].NAME; 

goBack.name = "backBtn"; 

goBack.buttonMode = true; 


addChild(goBack); 

goBack.addEventListener(MouseEvent.CLICK, anotherFunction); 

} 


function anotherFunction(e:MouseEvent):void { 

removeChild(goBack); 

} 

回答

1

你是錯的範圍。 (驚喜:-D)

變量goBack只是在「nameOfFunction」的內部定義的,當您嘗試從另一個函數(如「anotherFunction」)訪問它時,它將不再存在(即使它在顯示列表中)

有不同的可能性來解決這個問題:

function anotherFunction(e:MouseEvent):void { 
    removeChild(e.currentTarget); 
} 

還是最好的辦法是:促進GoBack的作爲類持有兩種功能的類成員。 (或者,如果你不使用班製作goBack「全球」。)

1

河馬是正確的,但我覺得這是很重要的解釋多一點。

您創建了一個局部變量,即var someVariable:DataType;在一個函數內。這意味着該變量只對函數的作用域(內部)中的對象可用,並且只會在該函數的生命週期中持續使用。不久之後,該函數一直運行,代碼消失,直到再次運行。它看起來像是很可能直接在時間線上的閃存IDE中進行編程,這很好,但是,如果您使用的是文檔類,則只需在構造函數上方的Class作用域中聲明變量,然後請將該值設置爲您現在使用的相同功能。這樣,對該變量的引用不存在於該函數內,它僅僅是從內部設置的。這將允許即使設置爲私有也可以從同一類中的任何位置訪問該變量。

這可能會幫助:

//Frame 1, Actions layer 
//Slap goBack right onto the root/stage 
var goBack:MovieClip; 
/* 
I noticed you had this data-typed differently, 
i prefer to type to an interface, not an implementation. 
Since your class is a movieclip in the library it extends 
MovieClip and therefor IS A MovieClip, but ok either way. 
*/ 

function nameOfFunction():void 
{ 
    goBack = new backButton_mc(); 
    goBack.x = 10; 
    goBack.y = 700; 
    goBack.back_text.text = myXML.*[buildingName].NAME; 
    goBack.name = "backBtn"; 
    goBack.buttonMode = true; 
    addChild(goBack); 
    goBack.addEventListener(MouseEvent.CLICK, anotherFunction); 
} 

function anotherFunction(e:MouseEvent):void 
{ 
    removeChild(goBack); 
} 

範圍是非常重要的,一段時間後,很容易解決。堅持下去,試驗一下,閱讀可以幫助你開發的習慣和標準,並且即使它對初學者來說可能會讓人望而生畏,但是一旦你學習並習慣了它,那麼很難回到在時間軸上的閃存IDE中進行編程,我相信只有顯示對象和音頻纔有可能。