Flash AS3中MovieClip(event.target)是什么意思?
有这么一段AS3程序:publicfunctioncircles(){varcircle1:Circle=newCircle();varcircle2:Circle=ne...
有这么一段AS3程序:
public function circles() {
var circle1:Circle = new Circle();
var circle2:Circle = new Circle();
var circle3:Circle = new Circle();
circle1.x = 250;
circle1.y = 175;
circle2.x = 300;
circle2.y = 175;
circle3.x = 275;
circle3.y = 225;
addChild(circle1);
addChild(circle2);
addChild(circle3);
circle1.addEventListener(MouseEvent.CLICK, clickCircle);
circle2.addEventListener(MouseEvent.CLICK, clickCircle);
circle3.addEventListener(MouseEvent.CLICK, clickCircle);
}
function clickCircle(event:MouseEvent) {
setChildIndex(MovieClip(event.target),numChildren-1);
//setChildIndex(event.target,numChildren-1); // error!
trace(MovieClip(event.target)); // [object Circle]
trace(event.target); // [object Circle]
}
请问MovieClip(event.target)与event.target有什么区别?用trace输出的结果为何都一样?
为什么用setChildIndex(event.target, numChildren-1)就出错? 展开
public function circles() {
var circle1:Circle = new Circle();
var circle2:Circle = new Circle();
var circle3:Circle = new Circle();
circle1.x = 250;
circle1.y = 175;
circle2.x = 300;
circle2.y = 175;
circle3.x = 275;
circle3.y = 225;
addChild(circle1);
addChild(circle2);
addChild(circle3);
circle1.addEventListener(MouseEvent.CLICK, clickCircle);
circle2.addEventListener(MouseEvent.CLICK, clickCircle);
circle3.addEventListener(MouseEvent.CLICK, clickCircle);
}
function clickCircle(event:MouseEvent) {
setChildIndex(MovieClip(event.target),numChildren-1);
//setChildIndex(event.target,numChildren-1); // error!
trace(MovieClip(event.target)); // [object Circle]
trace(event.target); // [object Circle]
}
请问MovieClip(event.target)与event.target有什么区别?用trace输出的结果为何都一样?
为什么用setChildIndex(event.target, numChildren-1)就出错? 展开
2个回答
展开全部
1、对于setChildIndex这个方法来说,已经规定了参数类型和个数。这就好像一个自动化生产线,比如这是一个薯条的生产线,它允许你放入土豆,然后加工成薯条。如果你放入的不是土豆,而是蕃茄什么的,它就会出错,因为它的程序只能处理土豆,而不具备蕃茄的处理能力。
2、而在上面的代码中event.target的类型是Object,object是个什么东西呢?它就好比我们生活中“东西”的概念,任何的物体我们都可以认为这是个“东西”。你可以说某个土豆是个“东西”,某个蕃茄是个“东西”,甚至某个人是个“东西”。
3、综合上面两点,你应该明白,当你把一个不知道是什么“东西”的event.target放到setChildIndex这条只允许放入特定物体生产线上,程序自然会认为你这种做法是错误的。
4、因为setChildIndex这条生产线只允许我们放入土豆(DisplayObject)这种类型的东西,那么我们怎么把现在拿到的event.target这个没有任何标签,不知道是个什么的“东西”放进去呢?好吧,很简单,我们只要给它贴上标签就可以了,我们通过强制类型转换MovieClip(event.target)可以给这个东西贴上标签,告知程序,这是某种类型的物体。你会问了,刚才不是说只能放入土豆(DisplayObject)吗?查阅一下帮助文档你就会发现,MovieClip是DisplayObject的子类,刚才我们已经把DisplayObject当作是土豆了,那么MovieClip可以认为是一种特殊的土豆,比如紫薯(好吧,紫薯不是土豆,不过我实在想不出其他分类了)。
5、我们再深入讨论一下,是不是任何的“东西”都可以通过改变标签(强制类型转换)的方式来放入薯条生产线呢?答案是否定的,你可以对标签任意操作,但是如果被程序发现你的行为是在造假,那么它会没收你的东西。不信你可以试试下面的代码
var i:uint=100;
trace(MovieClip(i));//输出null
2、而在上面的代码中event.target的类型是Object,object是个什么东西呢?它就好比我们生活中“东西”的概念,任何的物体我们都可以认为这是个“东西”。你可以说某个土豆是个“东西”,某个蕃茄是个“东西”,甚至某个人是个“东西”。
3、综合上面两点,你应该明白,当你把一个不知道是什么“东西”的event.target放到setChildIndex这条只允许放入特定物体生产线上,程序自然会认为你这种做法是错误的。
4、因为setChildIndex这条生产线只允许我们放入土豆(DisplayObject)这种类型的东西,那么我们怎么把现在拿到的event.target这个没有任何标签,不知道是个什么的“东西”放进去呢?好吧,很简单,我们只要给它贴上标签就可以了,我们通过强制类型转换MovieClip(event.target)可以给这个东西贴上标签,告知程序,这是某种类型的物体。你会问了,刚才不是说只能放入土豆(DisplayObject)吗?查阅一下帮助文档你就会发现,MovieClip是DisplayObject的子类,刚才我们已经把DisplayObject当作是土豆了,那么MovieClip可以认为是一种特殊的土豆,比如紫薯(好吧,紫薯不是土豆,不过我实在想不出其他分类了)。
5、我们再深入讨论一下,是不是任何的“东西”都可以通过改变标签(强制类型转换)的方式来放入薯条生产线呢?答案是否定的,你可以对标签任意操作,但是如果被程序发现你的行为是在造假,那么它会没收你的东西。不信你可以试试下面的代码
var i:uint=100;
trace(MovieClip(i));//输出null
2013-03-15
展开全部
flash.display.DisplayObjectContainer.setChildIndex () 方法 方法原型
public function setChildIndex(child:DisplayObject, index:int):void
明显看出setChildIndex方法第一个参数类型要求是DisplayObject
而flash.events.Event.target属性 类型是 Object
编译器在编译时,会检验数据类型,所以需要对target强制转换类型为MovieClip
注:MovieClip是DisplayObject类的子类
原理类似你自己工作的公司派你去出差,到了对方公司后,对方只知道你是客户公司的,还需要问你贵姓,才可以称呼你,通俗说法就是这样
public function setChildIndex(child:DisplayObject, index:int):void
明显看出setChildIndex方法第一个参数类型要求是DisplayObject
而flash.events.Event.target属性 类型是 Object
编译器在编译时,会检验数据类型,所以需要对target强制转换类型为MovieClip
注:MovieClip是DisplayObject类的子类
原理类似你自己工作的公司派你去出差,到了对方公司后,对方只知道你是客户公司的,还需要问你贵姓,才可以称呼你,通俗说法就是这样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询