当前位置:软件学习 > Flash >>

flash As3事件传递参数几种方法

方案一:

 代码如下 复制代码

// 要传递的参数
var value:int = 100;
// 触发事件的按钮
var btn:Btn = new Btn;
btn.addEventListener(MouseEvent.CLICK,clickHandler(value));

// 返回事件处理的函数
function clickHandler(v:int):Funciton
{
   return function (e:MouseEvent):void{
                  //处理传入的参数 V
                    doSomeThing(v);
               }
}

方案二-代理类:

 代码如下 复制代码

/**
*@author:Amyflash
* @example:
* import com.JEventDelegate
  stage.addEventListener(MouseEvent.MOUSE_OVER,JEventDelegate.create(yourHandler,"t1","t2"));
  function yourHandler(e:MouseEvent,...arg) {
  trace(e)
  trace(arg)
  }
*/

package {
public class JEventDelegate {
public function JEventDelegate() {
}
public static function create(f:Function,...arg):Function {
var F:Boolean=false;
var _f:Function=function(e:*,..._arg){
   _arg=arg
if(!F){
F=true
_arg.unshift(e)
}
f.apply(null,_arg)
  };
return _f;
}
public static function toString():String {
return "Class JEventDelegate";
}
}
}


来看一下怎么用这个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,这样我们就达到了传递参数的目的了。

补充:flash教程,As3.0
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,