
flash as3.0中的自定义事件怎样实现,请写出具体的实现方法
展开全部
我以我写的一个MP3的例子给你讲吧:
定义一个自定义事件类CompleteEvent.as
package
{
import flash.events.Event;
public class CompleteEvent extends Event
{
public static const PLAY_COMPLETE:String = "PLAY_COMPLETE";
public static const LOAD_COMPLETE:String = "LOAD_COMPLETE";
public function CompleteEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
override public function clone():Event
{
return new CompleteEvent(type, bubbles, cancelable);
}
override public function toString():String
{
return formatToString("CompleteEvent","type", "bubbles", "cancelable");
}
}
}
在其他类中,音乐播放完时,触发PLAY_COMPLETE是这样实现的:
if(int(sc.position/1000) == int(_sound.length/1000))
{
var ce:CompleteEvent = new CompleteEvent(CompleteEvent.PLAY_COMPLETE);
dispatchEvent(ce);
}
在其他类中侦听该事件:
addEventListener(CompleteEvent.PLAY_COMPLETE,playCompleteHandler);
//上面的自定义事件类,还可以在加载完成时去触发LOAD_COMPLETE.
自定义类的好处:比如,我们需要写一个类(例如LoadPic.as)单独来完成加载,加载完后返回加载对象时,在其他类中无法侦听到LoadPic类加载完成的事件,无法知道何时已经加载完可以读取加载对象。此时,我们需要一个自定义事件,当加载完时,触发此事件让其他类侦听,以执行其他剩余步骤。
类可以直接copy,测试代码可以这样写:
this.addEventListener(CompleteEvent.PLAY_COMPLETE,function(){trace("侦听到了!");});
var ce:CompleteEvent = new CompleteEvent(CompleteEvent.PLAY_COMPLETE);
dispatchEvent(ce);
类中静态两个string属性可以根据自己喜欢命名,甚至类名,但要注意package这里,改成自己的包路径。
定义一个自定义事件类CompleteEvent.as
package
{
import flash.events.Event;
public class CompleteEvent extends Event
{
public static const PLAY_COMPLETE:String = "PLAY_COMPLETE";
public static const LOAD_COMPLETE:String = "LOAD_COMPLETE";
public function CompleteEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
override public function clone():Event
{
return new CompleteEvent(type, bubbles, cancelable);
}
override public function toString():String
{
return formatToString("CompleteEvent","type", "bubbles", "cancelable");
}
}
}
在其他类中,音乐播放完时,触发PLAY_COMPLETE是这样实现的:
if(int(sc.position/1000) == int(_sound.length/1000))
{
var ce:CompleteEvent = new CompleteEvent(CompleteEvent.PLAY_COMPLETE);
dispatchEvent(ce);
}
在其他类中侦听该事件:
addEventListener(CompleteEvent.PLAY_COMPLETE,playCompleteHandler);
//上面的自定义事件类,还可以在加载完成时去触发LOAD_COMPLETE.
自定义类的好处:比如,我们需要写一个类(例如LoadPic.as)单独来完成加载,加载完后返回加载对象时,在其他类中无法侦听到LoadPic类加载完成的事件,无法知道何时已经加载完可以读取加载对象。此时,我们需要一个自定义事件,当加载完时,触发此事件让其他类侦听,以执行其他剩余步骤。
类可以直接copy,测试代码可以这样写:
this.addEventListener(CompleteEvent.PLAY_COMPLETE,function(){trace("侦听到了!");});
var ce:CompleteEvent = new CompleteEvent(CompleteEvent.PLAY_COMPLETE);
dispatchEvent(ce);
类中静态两个string属性可以根据自己喜欢命名,甚至类名,但要注意package这里,改成自己的包路径。
展开全部
任何一个继承自EventDispatcher的类都有dispatchEvent(event)广播自定义事件的方法。
比如:
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
this.addEventListener("KEY_SPACE",onKeySpace);
this.addEventListener("KEY_UP",onKeyUp);
function onKeyDown(event:KeyboardEvent):void
{
switch(event.keyCode)
{
case 32:
this.dispatchEvent(new Event("KEY_SPACE"));
break;
case 38:
this.dispatchEvent(new Event("KEY_UP"));
break;
}
}
function onKeyUp(event:Event):void
{
trace("按键:上");
}
function onKeySpace(event:Event):void
{
trace("按键:空格");
}
比如:
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
this.addEventListener("KEY_SPACE",onKeySpace);
this.addEventListener("KEY_UP",onKeyUp);
function onKeyDown(event:KeyboardEvent):void
{
switch(event.keyCode)
{
case 32:
this.dispatchEvent(new Event("KEY_SPACE"));
break;
case 38:
this.dispatchEvent(new Event("KEY_UP"));
break;
}
}
function onKeyUp(event:Event):void
{
trace("按键:上");
}
function onKeySpace(event:Event):void
{
trace("按键:空格");
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询