MovieClip=e.target as MovieClip; 是什么意思 FLASH CS3
你那个是错误的。
MovieClip是类型不能被作为实例复制操作。
var mc:MovieClip = e.target as MovieClip
的意思在在事件流经过当前目标的时候,把当前目标转化为 MovieClip。如果成功mc这个指针就是
当前时间目标的地址。如果转化失败,mc 的值是Null。
这一切都是依靠事件流机制。以一个u形的流向从父级流向子级,到达之后再向上冒泡。
那么在事件流的流向中,只要是子集实现了,IEventDispatcher 接口的 对象都会相应。
所以使用时候请谨慎。
AS3.0 高手麻烦讲解一下MovieClip,Sprite,Shape这三个类的区别... 谢谢!
Shape是最轻量级的图形对象,说的通俗点,就是矢量图形,它没有动画,没有时间轴,也不是容器,更不支持鼠标事件,是最基本的图形单元。
Sprite是最轻量级的显示容器,我们又称为没有时间轴的影片剪辑,它跟MovieClip的区别就是一个是有时间轴的,一个是没有时间轴的显示对象(显示容器),因此是最常用的显示对象,也是替代AS2.0中的空的影片剪辑的最理想对象。因为没有时间轴,自然就不存在帧的问题,它支持鼠标事件,当然还有其它的事件。
MovieClip就是我们接触最多的影片剪辑,也是美工的最爱,区别在Sprite中说明了,在此我也不细说了,除了有时间轴外,其它跟Sprite是一样的。
Flash AS3中MovieClip(event.target)是什么意思?
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
egret android support 4.0.0怎么使用
private demoMovieClip(){
var data = RES.getRes("stay_json");//JSON
var texture:egret.Texture = RES.getRes("stay_png");//Texture
var mc:egret.MovieClip = new egret.MovieClip(data, texture);
this.addChild(mc);
mc.frameRate = 50;//每秒帧序列次数
mc.gotoAndPlay("stay");
var data2 = RES.getRes("weizhu_json");//JSON
var texture2:egret.Texture = RES.getRes("weizhu_png");//Texture
var mc2:egret.MovieClip = new egret.MovieClip(data2, texture2);
this.addChild(mc2);
mc2.y = 120;
mc2.frameRate = 20;//每秒帧序列次数
mc2.gotoAndPlay("weizhu");//Uncaught Error: [F
AS3问题:为什么 文档类需要完全的继承影片剪辑类
继不继承并没有关系,关键是你要将这个类做什么!!!
如果你编写的类要被显示,那你想想,FlashPlayer怎么把他加入显示列表?有现成的Sprite类(MovieClip类是Sprite的子类),你只需要继承他,那么你就可以把你的文档类添加到显示列表,这样就能被用户(你)看到了。
当然你可以自己写一个类似Sprite的类,或者MovieClip类,然后把你写的文档类添加进去,但是这样很难,你也不知道与FlashPlayer相关接口的原理。
这下应该明白了吧,继承影片剪辑类就是让你省去了如何实现把文档类的实例添加到显示对象这一步。
如果你的类不需要被显示的话不继承也没关系。
rotation flash
_rotation 主要应用于控制旋转。
例如:
一个影片剪辑MC 样子如下:
-----
那么写上一句: MC._rotation+=60
样子就会像这样:
/
/
/
/
/
也就是说逆时针旋转60度。
更详细的信息建议你用FLASH自带的HELP说明。
flash中鼠标点下_rotation按下F1。
FLASH AS3 如何在一个MovieClip removeChild和NULL另一个MovieClip?
其实最好的方法就是自己做个remove的方法,然后用这个remove方法统一处理
var dis:Dictionary = new Dictionary;
//监听
addListener("mc1",mc1,Event.ENTER_FRAME,onEnterFunction1)
addListener("mc1",mc1,Event.ENTER_FRAME,onEnterFunction2)
/**名字,对象,监听类型,监听的方法*/
//为什么监听要这么麻烦呢,因为如果不把监听去掉,在内存里面还是会存在D,不行你可以注册个enterframe方法,就算 = null ,依然会运行。
function addListener(name:String,mc:DisplayObject,event:String,func:Function){
dis[name] = mc;
var listenerObj:Object = new Object;//存放方法的对象
listenerObj.event = event;
listenerObj.func = func;
if(!dis[name]["listener"]){//存放方法的数组
dis[name]["listener"] = []
}
var arr:Array = dis[name]["listener"];
dis[name]["listener"].push(listenerObj);
//监听
dis[name].addEventListener(arr[arr.length-1].event,arr[arr.length-1].func);
}
//移除的时候,只要把名字传进去就可以了。
function myRemoveChild(name:String){
if(dis[name].parent){//移除对象
dis[name].parent.removeChild(dis[name]);
}
if(dis[name]["listener"]){//移除监听
for each(var obj:Object in dis[name]["listener"]){
dis[name].removeEventListener(obj.event,obj.func);
}
}//清空
dis[name] = null;
}
这样就会比较干净。。
flash as3 中movieclip.gotoandplay方法怎么替代?
as3之后,不再推荐把代码写在元件里了
最好的办法是在舞台的第一帧写代码:
1,给你的按钮写上一个实例名称,例如:myBtn1;
2, 给你的movieclip写上实例名称,例如:myMov;
3, 在第一帧你给你的按钮加侦听函数,要写上路径,绝对或相对的
this.myBtn1.addEventListener(MouseEvent.CLICK,MyClickHandle);
4,写个处理函数
function MyClickHandle(e:MouseEvent):void{
路径.myMov.gotoandplay(21)
}
就能行了,随手写的一个简单方法 希望能写明白