我有在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