`

as3简单的事件机制讲解

阅读更多
下面我们通过简单的例子来深入讲解Flash as3的事件机制和事件类(Event )。
http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
感谢小小菜鸟的WEB菜园子
首先我们定义一个简单的类myClip,它继承自Sprite类。
package {
     import flash.display.Sprite;
     import flash.events.MouseEvent;
     
     public class myClip extends Sprite {
         public function myClip() {
             addEventListener(MouseEvent.CLICK,clickHander);
             
	         graphics.beginFill(0xffff00);
	         graphics.drawRect(0, 0, 400, 200);
         }
         private function clickHander(evt:MouseEvent):void {
             trace("单击色块了");
         }
     }
 }

我们在这个名为myClip的Sprite物体里画了一个黄色的方块,长400,宽200。
我们在Flex里生产一个myClip对象。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">
	<mx:Script>
		<![CDATA[
			private var mc:myClip;
			private function init():void{
				mc=new myClip();
				stage.addChild(mc);
			}
		]]>
	</mx:Script>

</mx:Application>

调试模型下运行结果如图:

当我们单击色块时,Console栏输出:单击色块了
如何让我们的这个影片剪辑被单击的时候可以执行舞台上的一个函数,比如function listen_clipEvent() 呢?
这个时候就需要用我们舞台上的这个函数监听myClip的事件了。
我们需要建立一个Event(事件);
你可以这么理解事件,你可以想像它是一个邮件,一封生活中的信,它就像一个信封里包含了好几封信----static const(静态的常量),收信的人(事件监听器)收到信后,根据信里的文字内容做事(执行函数),当然,你可以在这个Event(事件)信封里夹带点其他东西,也一块传出去,这几是事件里的属性或夹带的变量了。需要注意的是,这个事件类不专属于某一个物体,任何物体都可以来发送事件,它只是一个壳,一个信息传递的载体而已
好,我们下面就创建一个事件类:clipEvent。
package {
     import flash.events.Event;
     public class clipEvent extends Event {
         public static const CLIP_CLICK:String="clip_click";
         private var _mm:String;
         public function clipEvent() {
             super(CLIP_CLICK);
         }
         public function get M() {
             return _mm;
         }
         public function set M(a:String) {
             _mm=a;
         }
     }
 }

这个是事件的一个很普通的格式,String(文本类型)的static const(静态常量) setget方式的变量,可以被赋值,也可以给别的对象传值。
回到我们的myClip类,修改代码为:
 package {
     import flash.display.Sprite;
     import flash.events.MouseEvent;
     import flash.events.EventDispatcher;
     public class myClip extends Sprite {
         public function myClip() {
             addEventListener(MouseEvent.CLICK,clickHander);
         }
         private function clickHander(evt:MouseEvent):void {
             trace("click");
             var _clipEvent:clipEvent=new clipEvent();
             _clipEvent.M="wangyan";
             dispatchEvent(_clipEvent);
         }
     }
 }

当我们点击这个myClip对象时,它就会发出一个_clipEvent事件了,改事件的_clipEvent.M属性被我们赋值为"wangyan"了。
回到主程序,我们把代码改为:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">
	<mx:Script>
		<![CDATA[
			private var mc:myClip;
			private function init():void{
				mc=new myClip();
				stage.addChild(mc);
	            mc.addEventListener(clipEvent.CLIP_CLICK,listen_clipEvent);
			}
			private function listen_clipEvent(evt:clipEvent):void{
				trace("hello"+evt.M);
			}
		]]>
	</mx:Script>
</mx:Application>

我们加入了一个监听器:
mc.addEventListener(clipEvent.CLIP_CLICK,listen_clipEvent);

监听后执行的动作函数:
			private function listen_clipEvent(evt:clipEvent):void{
				trace("hello"+evt.M);
			}

测试执行后,单击色块物体,我们可以看到在Console测试台输出了:
click
hellowangyan



  • 大小: 6.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics