AS3自写类整理笔记 Dot类

 更新时间:2008年06月04日 19:47:03   作者:  
拖拽物体1和物体2,就可以看到效果了 index.base.geom.Dot类讲解 基本功能:记录xy两点

举例:

上面的flash展示源代码:
复制代码 代码如下:

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

var po1:Dot = new Dot(0,0,true); 
var po2:Dot = 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(e:DotEvent):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); 



下面是类的源代码:

复制代码 代码如下:

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 dis:DisplayObject; 

    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(_dis:DisplayObject,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(_dot:Dot,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(_dot:Dot,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(_dot:Dot,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; 
    } 
  } 

事件类的代码:

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);
    }
  }
}

相关文章

  • Actionscript 3.0中Singleton实现 修正篇

    Actionscript 3.0中Singleton实现 修正篇

    说明:上一篇"一个简单的Actionscript的单态模式类"的实现在Actionscript中报错,具体原因会在这篇Blog中详细说明。
    2009-02-02
  • ActionScript 3.0 编程体验

    ActionScript 3.0 编程体验

    日前,Adobe公司发布了Flash的最新版本Flash Professional 9 ActionScript 3.0 Preview,这是Flash 9的预览版,正式版本估计要到2007年才会推出,
    2008-03-03
  • Google Analytics在Flash cs3下的使用教程分析

    Google Analytics在Flash cs3下的使用教程分析

    因为工作的原因,最近使用到Google Analytics组件,这个组件在网上的资料很多,但是大部分都是详谈组件的优势的,具体的使用没有很详细的说明
    2009-02-02
  • AS3自写类整理笔记:ByteLoader类

    AS3自写类整理笔记:ByteLoader类

    该类的主要功能是把swf,jpg,png,gif等文件以字节的形式加载进来 以便于使用Loader.loadBytes方法,重复加载使用素材 如果图片格式为jpg,并且是渐进式格式jpeg,那么该类还可以帮助你边加载边显示
    2008-06-06
  • AS3 navigateToURL导致ExternalInterface 执行失败问题

    AS3 navigateToURL导致ExternalInterface 执行失败问题

    AS3 navigateToURL导致ExternalInterface 执行失败问题
    2009-02-02
  • Actionscript 3.0 鼠标事件

    Actionscript 3.0 鼠标事件

    这本书是一本经典的书籍,说实话一些小的AS3的项目是做了好几个,基本的语法也都知道(其实有面向对象编程语言的基础后再入门一门新的语言还是很快的)。现在找到了这边经典书籍完整版,就好好看看,顺便写一些总结。
    2009-02-02
  • 火山动态文本滚动条V5[AS3版]

    火山动态文本滚动条V5[AS3版]

    功能说明:本版滚动条除了继续保持体积小(小于2K),界面容易修改,资源占用率小的优势外,主要有以下几点改进: 1,使用AS3编写。 2,宽高动态指定。 3,增加滚动条背景点击事件。 4,消除了鼠标滚轮无法同时准确控制多个文本框的重大BUG。
    2008-03-03
  • 编写高效率的AS3代码的小技巧

    编写高效率的AS3代码的小技巧

    最近我研究了一些AS3代码优化的文章,一般都是集中在研究loops 和 Number types上的,本文不在重复类似的测试
    2009-02-02
  • as3+xml+asp+access做的有奖问答

    as3+xml+asp+access做的有奖问答

    as3+xml+asp+access做的有奖问答实现代码
    2009-02-02
  • as3 rollOver or mouseOver使用说明

    as3 rollOver or mouseOver使用说明

    rollOver与mouseOver同样在鼠标移到目标上时触发事件,细微区别在于,mouseOver的bubbles等于true,而rollOver的bubbles是false.
    2009-10-10

最新评论