AS3中的getChildByName
【转载的。。。。。。。。。。。。。。。】
在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的编译器了
AS3中的getChildByName的更多相关文章
- as3中的多线程
从fp11.4开始支持worker技术, 即as3中的线程概念, 到了fp11.5, flascc中开始支持pthread家族来创建线程. 总的来说, as3中有两种创建线程的方法: 1.直接在as3 ...
- AS3中释放优化的几条常识
as3中垃圾和堆弃物如不及时清理,会造成进程的速度方面授予限制,下面讲几点关于释放优化的几条内容. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉: 父对象内部的子对象被外部其 ...
- AS3中的单件(Singleton)模式
单件(singleton)模式在c#中是最容易实现的模式,其主要用意就在于限制使用者用new来创建多个实例.但在as3中,构造函数必须是public的(语法本身要求的),而且也不能在构造函数中抛出异常 ...
- AS3中String转换成Boolean
AS3中, 对布尔值的转换, 规定所有的非空字符串都是true. 下面都不行: var f:Boolean = new Boolean(str); var f:Boolean = str as Boo ...
- (转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用
http://blog.csdn.net/linjf520/article/details/8746064 大家在使用Function.apply或是call时,是否发现,第一个参数不知道怎么用,赋值 ...
- AS3中以post和get方式提交数据
这里主要介绍在as3中用URLRequest对像来post或get数据到服务器. post用于大数据量的提交,get用于小数据量的提交. as3中提交数据: POST方式: 1.新建一个test.fl ...
- AS3中ASCII码和字符互转函数
AS3中ASCII码和字符互转函数 字符转成ASCII码: 格式:字符串变量.charCodeAt(字符位置); var str:String = “A”; trace(str.charCodeAt( ...
- AS3中 is,as,typeof的区别
AS3中 is,as,typeof的区别 . var my_num:Number=9;trace(typeof my_num);var my_object:Array=["语文", ...
- 在as3中使用protobuf
在最近参与开发的adobe air项目中,前后端的通信协议从XML.JSON再到protobuf,最后选择protobuf原因,主要是前后端维护protobuf协议就行了,同时还可以利用IDE做一些编 ...
随机推荐
- (32)forms组件(数据校验)
forms组件的用处 1.就是用来做数据校验的 2.渲染页面 3.渲染错误信息(和局部刷新同效果) 数据校验 要使用forms组件必须要写一个类继承forms组件 urls.py from bbs01 ...
- 阻塞I/O、非阻塞I/O和I/O多路复用
一.阻塞I/O 首先,要从你常用的IO操作谈起,比如read和write,通常IO操作都是阻塞I/O的,也就是说当你调用read时,如果没有数据收到,那么线程或者进程就会被挂起,直到收到数据.阻塞的意 ...
- MySQL Event--Event and EventScheduler
MySQL Event 创建EVENT语法: CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name O ...
- 第一章 Html+Css使用总结(下)
1 开场 <!DOCTYPE html> <html lang="en"> <head> <!-- 对于中文网页需要使用 <meta ...
- redis 延时任务 看一篇成高手系列2
引言 在开发中,往往会遇到一些关于延时任务的需求.例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务.那么这里就会产生一 ...
- SqlDbx 个人版本使用指定的instant client
set Oracle_Home=D:\Toolkit\Oracle kits\instantclient_x86 set TNS_ADMIN=%Oracle_Home% set NLS_LANG=SI ...
- jQuery解决IE6/7/8不能使用 JSON.stringify 函数的问题
原文地址:http://www.ynpxrz.com/n1445665c2023.aspx JSON 对象是在 ECMAScript 第 5 版中实现的,此版于 2009 年 12 月发布:IE6 I ...
- python内置函数整理
1. abs() 函数返回数字的绝对值 2 divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b). 3, input() 相等于 eval(ra ...
- 10-安装es
1.安装jdk(jdk要求1.8.20或1.7.55以上) 2.上传es安装包 3.解压es tar -zxvf elasticsearch-2.3.1.tar.gz -C /opt/app/ 4.e ...
- oracle 序列sequence
查询所有的序列: select 'create sequence '||sequence_name|| ' minvalue '||min_value|| ' maxvalue '||max_valu ...