我有在AS3文件這和舞臺在AS3
區分這時候有點混亂可以說,我有一個鏈接到一個Main.as
一個主舞臺,然後什麼
之間的differenencethis.addChild()
stage.addChild()
還什麼類型的對象是 「本」
可以說我創建一個類,並通過在「當前」,所以我可以指從MC內部到階段
變種MC一個實例:DERP =新DERP(本)
裏面的derp是什麼?它是類型的通用對象嗎?
我有在AS3文件這和舞臺在AS3
區分這時候有點混亂可以說,我有一個鏈接到一個Main.as
一個主舞臺,然後什麼
之間的differenencethis.addChild()
stage.addChild()
還什麼類型的對象是 「本」
可以說我創建一個類,並通過在「當前」,所以我可以指從MC內部到階段
變種MC一個實例:DERP =新DERP(本)
裏面的derp是什麼?它是類型的通用對象嗎?
類的內部成員this
引用當前實例的成員函數被調用(所以它總是與類相同的類型)。例如,如果你有一個類鼻音與成員函數func
:
var twang1:Twang = new Twang();
twang1.func(); // Inside func(), "this" will refer to twang1
閃存首先創建在其上的一切必須被放置(直接或間接)(類型Stage
的)階段。然後,它實例化你的文檔類的一個實例,並把它放在舞臺上作爲一個孩子。因此,您的代碼中的this
永遠不會指向舞臺,因爲您沒有編寫Stage
類。
由於顯示樹在Flash中是分層結構的,因此當您向舞臺上已有的子對象(至少間接)添加內容時,它將出現在屏幕上。因此,this.addChild()
和stage.addChild()
之間的區別是對象最終將插入哪個容器。
當將this
傳遞給另一個對象的構造函數時,它將是定義方法(使用this
)的類的類型;所以在這種情況下,它將是文檔類的類型。
不是傳遞的顯示對象容器的其他對象,以便爲他們的孩子加入到它,你可以有你的類從雪碧(或其他一些DisplayObjectContainer
)繼承並添加子自己。然後,您可以將您創建的對象(其中包含子對象)添加到您自己(文檔類實例)中,該對象位於舞臺上。這也提供了更好的封裝。
還要注意的是,如果您想直接將孩子添加到舞臺上,則無需將舞臺傳遞給這些對象;他們已經有一個stage
財產只是爲了這個目的。關於該屬性的唯一棘手的事情是,直到該對象實際添加到舞臺上才爲空;所以,你需要一個事件偵聽器:
public class Car : Sprite {
public Car() {
this.addChild(new Wheel()); // Add to self
this.addEventListener(event.ADDED_TO_STAGE, populateStage);
}
private function populateStage():void {
stage.addChild(new RandomThingToAddToStage());
}
}
最後要注意,你不需要指定在大多數情況下this
。以下兩行是相同的(在一個類的方法中):
addChild(foo);
this.addChild(foo);
下面是文檔類的例子:使用上面的例子
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main()
{
this.addChild(new Sprite());
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}// end function
public function onAddedToStage(e:Event):void
{
stage.addChild(new Sprite());
}// end function
}// end class
}// end package
,所述this
關鍵字指向當前實例,在此,這將是該Main
顯示對象(沒有雙關語意)的情況下。當您對此調用addChild()
方法時,您正在調用Main
顯示對象上的addChild()
方法。此時,添加新的Sprite
實例時,將其添加到Main
顯示對象或換句話說this
顯示對象。
stage
另一方面是Main
的公共財產,它存儲對舞臺的引用。當您使用舞臺參考的addChild()
方法添加Sprite
的新實例時,將該實例添加到舞臺而不是Main
顯示對象。
簡單地說就是Main
是舞臺的小孩展示對象。所以當你做stage.addChild(new Sprite())
時,舞臺現在有兩個子對象,新的Sprite
實例和Main
。但是,當您從Main
類中執行this.addChild(new Sprite())
時,您指的是Main
。所以現在舞臺有一個子顯示對象Main
,而Main
具有Sprite
的新實例作爲子顯示對象。
好吧,讓我直接得到這個: – Saad 2011-03-17 04:58:49
@Saad:是嗎? (我寫這個答案,而睡眠剝奪BTW,所以一些地方可能不太清楚) – Cameron 2011-03-17 05:02:54
@Cameron OK,讓我得到這個直:首先 我們 主要>>階段(隱含的) 那麼如果我們去 foo = new Foo() adChild(foo); 我們 主要>> >>舞臺富 和內部FOO我有 foobar的=新FooBar的() 的addChild(foobar的); 我們有 主>>舞臺>> foo >> foobar 但是如果我想在舞臺下添加foobar,基本上我們的main.as但是在foobar裏面(我不需要將這個實例傳入foo叫它x,然後去:x.addChild(foobar)? – Saad 2011-03-17 05:10:20