AS3中的getChildByName

本文详细解释了在ActionScript 3中如何正确使用getChildByName方法来动态获取并操作场景中的元件,特别是如何解决自定义类实例的属性和方法调用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【转载的。。。。。。。。。。。。。。。】

在AS3中,我们可以用getChildByName来获取一个元件,但是要注意返回的类型是DisplayObject,这样一旦我们的元件中有一些自定义的方法就不能使用了。

比如我有一个类Ball,Ball有一个方法move,那么我可以这样写:

var b:Ball=new Ball();

addChild(b);

b.move();//这样没问题

getChildByName(”b”).move();//这样编译时会报错

其原因应该就是getChildByName返回的类型是DisplayObject,而并不是Ball,所以无法调用Ball的方法。

如果这样写:

var c:Ball= getChildByName(”b”) as Ball;

c.move();

这样就没问题了,编译通过,可以调用Ball的方法。

 

下面是我自己的总结:

getChildByName方法是用于元件动态命名时的。例如:在场景中有一个元件,在属性面板中对其命名为cc,在对其操作时就可以写 cc.y=XXX;而动态命名时,就如上面的例子,场景中本没有这个元件,用addChild将其放到场景中时再对其命名,这时要对这个元件进行操作就要 用到getChildByName了,再举例如下:

var b:Ball=new Ball()

addChild(b)

b.name="mc1"

getChildByName("mc1").y=200

 

补充:

例如场景中有一元件mc1,现在用一个字符串来表示它,并且利用这段字符串来调用它的属性或方法:

var cc="mc1"

getChildByName(cc).XXX

这时如果是自定义的属性或方法的话,会报错,因为AS3认不出来被操作的对象是何类型的,这就需要我们来告诉它,有两种方法解决这个问题:

一、将getChildByName(cc)改成MovieClip(getChildByName(cc)),意思是先用getChildByName 将cc这个字符串变成DisplayObject,然后再将它变为MovieClip,这时AS3认出它是一个MovieClip了,就可以访问它的属性 和调用它的方法了。

二、将语句写成:

var cc:MovieClip=mc1

this["cc"].XXX

 

另外还有一种字符串的写法:

var cc=mc1.name

this["cc"].XXX

这里mc1.name必须是在属性面板里命名的,而不是mc1.name="XXX"命名的

[]在这里就是动态的意思,被操作的对象的类型是动态的,这样就可以绕过AS3的编译器了

转载于:https://www.cnblogs.com/zqiang0803/p/9750014.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值