public class MainForm extends Sprite{ public function MainForm(){ var mc1:MovieClip = new Mc1(); addChild(mc1); var mc2:MovieClip = new Mc2(); addChild(mc2); } } } 那么如果用反射的方法应该怎样做呢,看下面的代码:
package net.smilecn{ import flash.display.Sprite; import flash.display.MovieClip; import flash.utils.getDefinitionByName; public class MainForm extends Sprite{ public function MainForm(){ var ClassReference:Class = getDefinitionByName(\) as Class; var instance:MovieClip = new ClassReference(); addChild(instance); } } } 这段代码只加载了Mc1这个元件,而且我们发现代码比上一种方法更复杂一些,那为什么要使用反射这种方法呢,我们在看一段代码: package net.smilecn{ import flash.display.Sprite; import flash.display.MovieClip; import flash.utils.getDefinitionByName; public class MainForm extends Sprite{ public function MainForm(){ for(var i=1;i<=2;i++){ var ClassReference:Class = getDefinitionByName(\+i) as Class; var instance:MovieClip = new ClassReference(); addChild(instance); } } } } 我们发现现在这种写法是不是更简单的一种写法,当库中有名字为Mc1,Mc2,Mc3……这种更多的MC时,我们只需要改变循环变量的范围就可以了. -事件
当前位置:主页>AS入门>
作者:arrowyoung发表于:2009-09-01Tag:事件 菜鸟教程 在as3.0中我们用的最多的可能就是\事件\我们会侦听各种事件. 当我们点击一个按钮时,在2.0中我们可能会用到这样的语句: _btn.onPress = function(){};
当然后我们也可以用addEventListener来侦听一个点击事件.在3.0中我们一律用addEventListener这种加侦听的方式来完成.
_btn.addEventListener(MouseEvent.CLICK,btnClickHandler); function btnClickHandler(event:MouseEvent):void{ //点击后代码 } 这是一个单击事件,基本上我们用到的系统里的所有类都会有事件,在帮助文档中我们可以找到,我们可以很方便的使用这些事件.
我们现在把上一节中我们用到的代码稍加一下变动:
package net.smilecn{ import flash.display.Sprite; import flash.display.MovieClip; import flash.utils.getDefinitionByName; import flash.events.MouseEvent; public class MainForm extends Sprite{ public function MainForm(){ for(var i=1;i<=2;i++){ var ClassReference:Class = getDefinitionByName(\+i) as Class; var instance:MovieClip = new ClassReference(); instance.name = \ +i; instance.addEventListener(MouseEvent.CLICK,insClickHandler); addChild(instance); } } private function insClickHandler(event:MouseEvent):void{ trace(\你点击了:\,event.currentTarget.name); } } } event.currentTarget是指当前侦听的对像,加个name属性就是这个对像的名字,这里MouseEvent就是鼠标事件;Sprite、MovieClip、SimpleButton、Button这一些都可以加鼠标事件侦,当然不止这一些(注:SimpleButton是元件按钮,Button是组件按钮)
MouseEvent.CLICK这个实际上是一个常量,代表着\这个字符串,从字面上我们就可以看出这个是单击的意思,通常这些事件其实都可以字面上看到意思,像
MouseEvent.MOUSE_DOWN就是鼠标按下事件,值得一提的是3.0里面加上了双击事件,是MouseEvent.DOUBLE_CLICK,不过使用双击还要使doubleClickEnabled 为true才行. 我们不可能从别人那里知道一个类有多少种事件,所以帮助是最好的老师,我们学习AS3最好的教程其实就是帮助,所以要勤看帮助,这样才能进步更快. 下节继续讲解事件侦听. (编辑:非熊) 事件侦听
当前位置:主页>AS入门>
作者:arrowyoung发表于:2009-09-03Tag:事件侦听 菜鸟教程
在上一节中我们介绍了侦听,要知道我们可能经常会用到侦听,所以我们会写很多个addEventListener,经常有些侦听我们用过一次后可以就不会再用了,那么为了节省资源,我们要将这些侦听删除掉,要侦除侦听这们用这样的方法:
instance.addEventListener(MouseEvent.CLICK,insClickHandler);//添加侦听 instance.removeEventListener(MouseEvent.CLICK,insClickHandler);//删除侦听 这里我们用removeEventListener就可以将侦听删除掉,我们在编程过程中,已经不用的侦听我们应该及时删除掉以节省资源.
现在我们来看一个小例子,这个例子的功能是有两个按钮,点击其中一个自己变成不可点击,另一个变成可点击状态.
package net.smilecn{ import flash.display.Sprite; import flash.display.SimpleButton; import flash.events.MouseEvent; public class MainForm extends Sprite{ public function MainForm(){ _btn1.addEventListener(MouseEvent.CLICK,btnClickHandler); } private function btnClickHandler(event:MouseEvent):void{ trace(\你点击了:\,event.currentTarget.name); _btn1.addEventListener(MouseEvent.CLICK,btnClickHandler); _btn2.addEventListener(MouseEvent.CLICK,btnClickHandler); event.currentTarget.removeEventListener(MouseEvent.CLICK,btnClickHandler); } } } 在我们上一节讲到的FLA文件在场景里加两个按钮一个名叫_btn1,一个叫_btn2;发布我们会发现点一个按钮后这个按钮的侦听就会被删除,另一个被加上.
当然像按钮的帧听没必要删除,但关于时间之类的侦听,不用了就要删除了
使一个按钮禁用可能用不到删除侦听的方法,大家可以会想到2.0里面用到的enabled,但在3.0中enabled对SimpleButton没有作用,对Button有作用,如果要完成相同的功能,我们要用mouseEnabled
下一节我们再看类和类之前的消息传递. (编辑:非熊) -消息机制
当前位置:主页>AS入门>
作者:arrowyoung发表于:2009-09-03Tag:消息机制 菜鸟教程
前两节中,我们讲到了侦听,类与类之前也是可以侦听的,类与类之前的侦听就达到了类和类之前发消息的功能,这其实就是AS3.0中的消息机制。 我们先一个叫做MyClass的类:
package net.smilecn{ import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class MyClass extends Sprite{ public function MyClass(){ addEventListener(MouseEvent.CLICK,clickHnadler); } private function clickHnadler(event:MouseEvent):void{ dispatchEvent(new Event(Event.CLOSE)); }