当前位置: 首页 > 图文教程 > Flash动画 > ActionScript > Flash as3教程:OutDisplay类

ActionScript
FLASH 3D相册之利用BitmapData类制作
Flash 脚本游戏开发教程 第一课
Flash 脚本游戏开发教程第二课
Flash 脚本游戏开发教程第三课
Flash 脚本游戏开发教程第四课
Flash 脚本游戏开发教程第五课
Flash 脚本游戏开发教程第六课
Flash 脚本游戏开发教程第七课
Flash 脚本游戏开发教程第八课
Flash AS实现的蝌蚪摆尾动画的教程
从基础开始深入学Flash AS3教程(4)(译文)
从基础开始深入学Flash AS3教程(5)(译文)
从基础开始深入Flash AS3教程(2)(译文)
从基础开始深入学Flash AS3教程(3)(译文)
Flash AS3对单个图片进行角色动作化处理
从基础开始深入Flash AS3教程(1)(译文)
Flash教程:if条件语句的用法
Flash AS教程:_visible属性的详细讲解
Flash AS教程:图片环绕旋转效
Flash教程:trace()的使用

ActionScript 中的 Flash as3教程:OutDisplay类


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-16   浏览: 53 ::
收藏到网摘: n/a

前面我们学习了Flash AS3教程:疑难杂症汇总, 我们继续学习AS3的index.base.func.OutDisplay类 例子展示:点开观看!
/upload/tech/20090916/20090916063240_e97ee2054defb209c35fe4dc94599061.swf

index.base.func.OutDisplay类讲解:
当对象再一次触发某事件的时候,判断是否在事件范围内,如果不在则调度Event.CANCEL事件

构造函数
public function OutDisplay(_type:String,_dis:DisplayObject,...objs)
第一个参数:侦听类型
第二个参数:作用范围,一般来说都是用Stage作为范围,当然也有用在其他地方的
第三,四……个参数:可以拥有_type事件的对象
实例化后,侦听_dis的_type事件,每当触发_type事件,就开始判断事件目标是否存在objs中,或者objs中某项的子集显示对象,如果有则没有反应,如果没有则发出Event.CANCEL事件

add方法
public function add(...objs):Array
增加可以拥有_type事件的对象

objects属性(只读)
public function get objects():Array
返回可以拥有_type事件的对象列表

clear方法
public function clear(isDispatch:Boolean = false):void
清除类里面的侦听,以及引用
第一个参数:如果为true,那么调用clear之后会发出Event.CANCEL,反之没反应!默认为false

例子:
下面是展示flash的源代码,这只是一个简单应用,如果写复杂一点,也可以写出真正的快捷菜单

CODE:
import index.base.func.OutDisplay;

var menu:Menu = new Menu;
menu.mc1.addEventListener(MouseEvent.MOUSE_OVER,mouseOverFun);
menu.mc2.addEventListener(MouseEvent.MOUSE_OVER,mouseOverFun);
menu.mc3.addEventListener(MouseEvent.MOUSE_OVER,mouseOverFun);
menu.mc4.addEventListener(MouseEvent.MOUSE_OVER,mouseOverFun);
addChild(menu);

function mouseOverFun(e:MouseEvent){
    var m:Menu = new Menu;
    m.x = e.currentTarget.x   e.currentTarget.parent.x;
    m.y = e.currentTarget.y   e.currentTarget.parent.y;
    addChild(m);
   
    var out:OutDisplay = new OutDisplay(MouseEvent.MOUSE_OVER,stage,e.currentTarget);
    out.addEventListener(Event.CANCEL,cancelFun);
    out.add(m);
   
    m = null;
    out = null;
}

function cancelFun(e:Event):void{
    var out:OutDisplay = e.currentTarget as OutDisplay;
    var tmpAr:Array = out.objects;
    removeChild(tmpAr[1]);
    out.removeEventListener(Event.CANCEL,cancelFun);
   
    tmpAr = null;
    out = null;
}
类的源代码:

CODE:
package index.base.func{
   
    import flash.display.DisplayObject;
    import flash.display.DisplayObjectContainer;
    import flash.events.Event;
    import flash.events.EventDispatcher;
   
    public class OutDisplay extends EventDispatcher{
        
        //保存所有对象
        private var objAr:Array;
        //保存侦听类型
        private var type:String;
        //保存侦听范围
        private var dis:DisplayObject;
        
        //构造函数
        public function OutDisplay(_type:String,_dis:DisplayObject,...objs){
            type = _type;
            objAr = objs;
            dis = _dis;
            dis.addEventListener(_type,fun);
        }
        
        //事件处理
        private function fun(e:Event):void{
            for(var i:uint = 0;i<objAr.length;i  ){
                if(e.target == objAr[i]) return;
                if(objAr[i] is DisplayObjectContainer){
                    if(objAr[i].contains(e.target)) return;
                }
            }
            dis.removeEventListener(type,fun);
            dispatchEvent(new Event(Event.CANCEL));
        }
        
        //添加对象
        public function add(...objs):Array{
            for(var i:int = 0; i < objs.length; i   ){
                objAr.push(objs[i]);
            }
            return objects;
        }
        
        //获取对象列表
        public function get objects():Array{
            return objAr;
        }
        
        //卸载
        public function clear(isDispatch:Boolean = false):void{
            if(isDispatch) dispatchEvent(new Event(Event.CANCEL));
            dis.removeEventListener(type,fun);
            objAr = null;
        }
        
    }
}