[AS3.0]一步一步学ActionScript 3.0(十)

上一节中我们讲到了类与类之前的消息传递,其实是一个类发消息,另一个类侦听这个消息,我们在发消息的时候能不能传递参数呢,当然是可以的,其实发消息的时候传参数在2.0里面是很方便的,但3.0里面要去写一个类去继承Event这个类,感觉麻烦了许多,在我学习3.0的初期一直不是很理解到了3.0为什么变复杂了,所以刚开始经常会用到扩展Event这个类,但到后来发现只要程序的架构写好了,这种方法是可有可无了,不过今天还是要讲解这种方法的使用。

我们先写一个继承Event的类:

package  net.smilecn{
    
    
import  flash.events.Event;
    
    
public   class  MyEvent  extends  Event{
        
        
private  var _object:Object;
        
        
public  function MyEvent(type:String,object:Object): void {
            
super (type);
            _object
= object;
        }
        
        
public  function get param():Object {
            
return  _object;
        }
    }
    
}

这个一个很简单的类,继承了Event这个类,在构造方法里有一个super(type),super的意思是执行父类的构造方法,也就是执行Event的构造,type是消息的类型,就是消息的名字,一个字符串,object就是我们要传的参数要用到的一个变量,是一个对象,我们知道对象是很方便的,可以存储1到多个参数,下面是一个GET方法,通过param这个名字去取_object这个对像的值。

再来看一下怎么用这个MyEvent类,修改上一节中的文件;

MyClass:

package  net.smilecn{
    
    
import  flash.display.Sprite;
    
import  flash.events.MouseEvent;
    
import  net.smilecn.MyEvent;
    
    
public   class  MyClass  extends  Sprite{
        
        
public  function MyClass(){
            addEventListener(MouseEvent.CLICK,clickHnadler);
        }  
        
        
private  function clickHnadler(event:MouseEvent): void {
            dispatchEvent(
new  MyEvent( " myClassMessage " ,{a: 100 ,b: 200 }));
        }
    }
    
}

我们发现修改代码并不多,由new Event变成了net MyEvent,也就是说以前发的消息是as自带的Event事件,现在发的是我们自己写的MyEvent事件,再看参数还有一个{a:100,b:200},这个参数就是我们传进去的对象,这个对象有两个属性值,一个叫a,值为100,一个叫b,值为200;

再来看文档类:

package  net.smilecn{
    
    
import  flash.display.Sprite;
    
import  net.smilecn.MyEvent;
    
import  net.smilecn.MyClass;
    
    
public   class  MainForm  extends  Sprite{
        
        
private  var myClass:MyClass;
        
        
public  function MainForm(){
            myClass 
=   new  MyClass();
            addChild(myClass);
            myClass.addEventListener(
" myClassMessage " ,myClassMessageHandler);
                
        }
        
        
private  function myClassMessageHandler(event:MyEvent): void {
            trace(
" 你收到了myClass的消息:a= " + event.param.a + "  b= " + event.param.b);
        }
    }
}

文档类中修改的地方是侦听到消息后执行的方法,我们发现参数的类型变成了MyEvent,因为我们发的是MyEvent的事件,这里收到事件的类型当然是MyEvent,在event.param就是去取MYEevent_object,就是我们在MyClass传过的对象了,event.param.a的值就是100,event.param.b的值就是200,这样我们就达到了传递参数的目的了。


转载:http://blog.csdn.net/arrowyoung/article/details/2137606

你可能感兴趣的:([AS3.0]一步一步学ActionScript 3.0(十))