我的对象的父级
对于名为s 并放置在您的Stage 上的实例,或者由以下示例中的代码调用,您只需跟踪它的parent 即可知道您应该在点之前写什么。您的对象的父对象在您的点之前:
var s:Square = new Square();
addChild(s);
trace(s.parent); // [object MainTimeline]
trace(s.parent.parent); // [object Stage]
这意味着你的对象被放置在你的MainTimeline上,它本身被放置在它的Stage上。
要引用DisplayObject 的Stage 对象,您只需使用它的stage 属性:
trace('s Stage ' + s.stage); // s Stage [object Stage]
trace('this Stage ' + this.stage); // this Stage [object Stage]
通过使用关键字this,您指的是您的主时间线:
trace(this is MainTimeline); // true
然后调用你的对象你可以写:
trace(s); // [object Square]
// or
trace(this.s); // [object Square]
我应该使用 getChildByName 方法吗?
您不需要使用getChildByName 方法来调用对象。你可以直接用它的名字来称呼它。为什么在不需要的时候使用方法?
var s1:Square = new Square();
trace(s1); // [object Square]
this.addChild(s1);
s1.name = 'Square1';
trace(this.getChildByName("Square1")); // [object Square]
不同之处在于,如果您的对象尚未通过addChild 方法添加到显示列表中,getChildByName 将返回null。
但是,如果您必须绝对通过方法调用 DisplayObjects 的实例,请使用 getChildAt 方法通过它们的索引调用它们,而不是使用 getChildByName 方法通过它们的名称调用它们。
trace(this.getChildAt(0)); // [object Square]
您不应该使用比getChildAt 方法慢的getChildByName 方法。可以用下面的代码比较这两种方法的速度:
// testing getChildByName
var sta:Number = getTimer();
for (var i:int = 0; i < 5000000; i++) {
getChildByName('Square1');
}
var sto:Number = getTimer();
trace((sto - sta) + ' ms'); // 2299 ms
// testing getChildAt
var sta:Number = getTimer();
for (var i:int = 0; i < 5000000; i++) {
getChildAt(0);
}
var sto:Number = getTimer();
trace((sto - sta) + ' ms'); // 610 ms