Flash AS3教程:Dot类(2)

http://www.itjxue.com  2015-07-17 23:39  来源:未知  点击次数: 

举例:
上面的flash展示源代码

CODE:

import index.base.geom.Dot;
import index.base.events.DotEvent;

var po1ot = new Dot(0,0,true);
var po2ot = new Dot(0,0,true);
po1.bind(p1,true);
po2.bind(p2,true);

po1.addEventListener(DotEvent.DOT_CHANGE,dotChangeFun);
po2.addEventListener(DotEvent.DOT_CHANGE,dotChangeFun);

function dotChangeFun(eotEvent):void{
        te.text = "物体1坐标:" + po1.x + "," + po1.y;
        te.appendText("\n物体2坐标:" + po2.x + "," + po2.y);
        te.appendText("\n两点之间距离:" + po1.from(po2));
        te.appendText("\n所形成的角度:" + po1.angle(po2));
        te.appendText("\n物体1所在象限:" + po1.quadrant(new Dot,false));
        te.appendText("\n物体2所在象限:" + po2.quadrant(new Dot,false));
        te.appendText("\n物体1对于物体2在象限:" + po2.quadrant(po1));
}

p1.addEventListener(MouseEvent.MOUSE_DOWN,p1MouseDownFun);
p2.addEventListener(MouseEvent.MOUSE_DOWN,p2MouseDownFun);

function p1MouseDownFun(e:MouseEvent):void{
        p1.startDrag();
        stage.addEventListener(MouseEvent.MOUSE_UP,p1MouseUpFun);
}

function p1MouseUpFun(e:MouseEvent):void{
        p1.stopDrag();
        stage.removeEventListener(MouseEvent.MOUSE_UP,p1MouseUpFun);
}

function p2MouseDownFun(e:MouseEvent):void{
        p2.startDrag();
        stage.addEventListener(MouseEvent.MOUSE_UP,p2MouseUpFun);
}

function p2MouseUpFun(e:MouseEvent):void{
        p2.stopDrag();
        stage.removeEventListener(MouseEvent.MOUSE_UP,p2MouseUpFun);
}
下面是类的源代码

CODE:

package index.base.geom{
        
        import flash.events.EventDispatcher;
        import flash.display.DisplayObject;
        
        import index.base.events.DotEvent;
        
        public class Dot extends EventDispatcher{
               
                private var _x:Number;
                private var _y:Number;
                private var disisplayObject;
               
                public var isListen:Boolean;
               
                public function Dot(x_:Number = 0,y_:Number = 0,_isListen:Boolean = false){
                        _x = x_;
                        _y = y_;
                        isListen = _isListen;
                }
               
                //绑定DisplayObject
                public function bind(_disisplayObject,isInTime:Boolean = false):void{
                        dis = _dis;
                        updata();
                        if(isInTime) dis.addEventListener("enterFrame",enterFrameFun);
                }
               
                //帧频繁事件
                private function enterFrameFun(e:Object):void{
                        if(_x != dis.x) x = dis.x;
                        if(_y != dis.y) y = dis.y;
                }
               
                //更新xy数据
                public function updata():void{
                        if(dis != null){
                                _x = dis.x;
                                _y = dis.y;
                        }
                }
               
                //计算该点与另外一点的距离
                public function from(_dotot,isQuadrant:Boolean = false):Number{
                        updata();
                        var num:Number = Math.sqrt(Math.pow(_dot.x - _x,2) + Math.pow(_dot.y - _y,2));
                        if(!isQuadrant) num = Math.abs(num);
                        return num;
                }
               
                //计算该点与另外一点所形成的线段与水平线的夹角,按顺时间计算
                public function angle(_dotot,isRadian:Boolean = false):Number{
                        updata();
                        var numx:Number = _dot.x - _x;
                        var numy:Number = _dot.y - _y;
                        var num:Number = Math.atan(numy/numx);
                        if(!isRadian) num = num * 180 / Math.PI;
                        return num;
                }
               
                //返回当前点处在另外一点的哪个象限中 或 返回另外一点处在当前点的哪个象限中
                public function quadrant(_dotot,isMaster:Boolean = true):int{
                        updata();
                        if(_x == _dot.x || _y == _dot.y){
                                return 0;
                        }
                        
                        var num:int;
                        var p1:Boolean = (_x - _dot.x) > 0;
                        var p2:Boolean = (_y - _dot.y) > 0;
                        num = isMaster ? (p1 ? (p2 ? 2 : 3) : (p2 ? 1 : 4)) : (p1 ? (p2 ? 4 : 1) : (p2 ? 3 : 2));
                        
                        return num;
                }
               
                //返回该点距0点的距离
                public function get length():Number{
                        updata();
                        var num:Number = Math.sqrt(Math.pow(_x,2) + Math.pow(_y,2));
                        return num;
                }
               
                //清除显示对象
                public function clear():void{
                        dis = null;
                }
               
                //改变X坐标
                public function set x(num:Number):void{
                        _x = num;
                        if(dis != null) dis.x = num;
                        if(isListen) dispatchEvent(new DotEvent(DotEvent.DOT_CHANGE,true));
                }
               
                //设置X坐标
                public function get x():Number{
                        updata();
                        return _x;
                }
               
                //改变Y坐标
                public function set y(num:Number):void{
                        _y = num;
                        if(dis != null) dis.y = num;
                        if(isListen) dispatchEvent(new DotEvent(DotEvent.DOT_CHANGE,true));
                }
               
                //设置Y坐标
                public function get y():Number{
                        updata();
                        return _y;
                }
        }
}

事件类的代码:

CODE:

package index.base.events{
        
        import flash.events.Event;
        
        public class DotEvent extends Event{
               
                public static const DOT_CHANGE:String = "dotChange";
               
                public function DotEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false){
                        super(type,bubbles,cancelable);
                }
        }
}

(责任编辑:IT教学网)

更多

推荐Flash actionscript文章