2013-02-19 150 views
1

我真的好奇。我製作了一個MovieClip類Apple,我編寫了一個函數,用名稱「apple」創建一個新實例。每次將新實例推入Array「Apple」時。我調用函數5次,我得到5個蘋果。我可以通過調用它們來處理它們,例如蘋果[0]。當我追蹤我的數組時,我會看到5 [對象Apple]的東西。所以也許我不太瞭解AS3對象的結構,但是不應該每個對象都有一個名字嗎?AS3類實例名稱

當我設置apple.name並用5個不同的名稱獲得的陣列,我無法通過像apple1.x = 10名稱操縱對象。 計算機如何知道哪個蘋果在哪裏,如果每個都有自己的座標?是唯一稱呼他們的方式:蘋果[0] - 蘋果[4]?如果我爲所有蘋果創建一個應該相同的代碼,那麼我應該如何解決該功能,以「this」?原因當我寫班代碼我還沒有任何名字......

例如,如果我想讓蘋果類可以拖動圖片(MovieClip),創建任意數量的蘋果,最多一百萬,我不可能將蘋果[0] .addEventListener,蘋果[1] .addEventListener ...蘋果[1000000] .addEventListener添加到代碼中。 如何使其成爲全球?

我問的原因,當我直接編碼一個特定的實例,它有一個名稱,我確切地知道我在處理什麼。和一個班級一起工作,製作很多東西我有點不...對不起,我很綠色

回答

4

您不需要名稱就能夠訪問和操作您的實例。

你可以做這樣的事情:

var apples:Array = new Array(); 

for (var i:int = 0; i < 100; i++) 
{ 
    var apple:Apple = new Apple(); 
    apples.push(apple); 
    apple.x = Math.random() * 500; 
    apple.y = Math.random() * 500; 
    addChild(apple); 
    apple.addEventListener(MouseEvent.CLICK, onAppleClick); 

} 

function onAppleClick(e:MouseEvent):void 
{ 
    var ind:int = apples.indexOf(e.currentTarget); 
    var apple:Apple = apples[ind]; 
    trace(ind); 
    apples[ind].visible = false; 
    //or 
    //apple.visible = false; 
} 
+1

我覺得這是一個很好的例子,讓OP滾動。所有DisplayObject實例的「名稱」屬性@SherWood與編譯前腳本中的變量名稱不同。在您的示例中,將對象存儲在數組中,AS3知道對象的位置並通過數組維護對它們的引用。說數組在地址0,每個對象是20字節,對象1在0,對象2然後在地址20,對象3在地址40(通常這種事情與C討論,但理論仍然適用於AS3) 。這裏顯示了獲取變種的方法。 – shaunhusain 2013-02-19 13:56:41

+2

還有一點要注意的是,如果你在類中編寫了一個方法(比如說你在Apple類中編寫了一個方法),那麼「this」意味着當前的實例,所以不會在實例的「外部」編寫一堆代碼在它們上面,你可以將該代碼封裝到類定義中的方法中。 – shaunhusain 2013-02-19 13:58:07

+0

非常好,簡單,謝謝一堆!我會盡力告訴你它是否有效。此外,這是一種從羣中獲得特定蘋果的方法嗎?如果我想單擊其中的一個,而不是可見的應用marryMe函數,並更改ringPutOn = true,並將顏色更改爲粉紅色,並停止執行其他蘋果所做的操作,這將會很特別,是不是很好? (什麼是perv XD)它不會改變整個班級?或者你更願意建立一個新的班級,代表一個妻子 - 蘋果,並改變點擊一個新的班級? – SherWood 2013-02-19 20:01:18

3

同樣的問題,呵呵? :)

例如Apple extends Sprite並繼承財產name

這是公開的,這意味着你可以改變它的名字。

var apple:Apple = new Apple() ; 
apple.name = "MegaApple" ; 

此外,如果您將蘋果添加到舞臺上,您可以通過名稱獲取他。

stage.addChild(apple) ; 

獲得蘋果回來:

var oldApple:Apple = stage.getChildByName("MegaApple") ; 

但是,這絕不意味着,你可以使用蘋果這樣的: MegaApple.move() - 因爲蘋果的名稱應該是蘋果的一個屬性,而不是一個名字的變量。

當然,你也可以手動創建許多蘋果:

var apple1 = new Apple() ; 
var apple2 = new Apple() ; 
var apple3 = new Apple() ; 

但是,如果他們所有的行爲方式相同,有做沒有意義的。這就是爲什麼你將它們存儲到數組中。

希望你明白我的意思。

+0

呵呵,不好意思,你走了,我仍然有問題^ _ ^」 – SherWood 2013-02-19 19:54:47

+0

萘乙酸,它的優良:) – vikingmaster 2013-02-19 19:55:22