·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]Direction类和Dot类的一个用法范例值得学习(2)

时间:2017-05-08 09:57codesky
DirectionEvent类源代码: packageindex.base.geom{ importflash.events.EventDispatcher; importflash.display.DisplayObject; importindex.base.events.DotEvent; publicclassDotextendsEventDispatcher{ private

DirectionEvent类源代码:

  1. package index.base.geom{ 
  2.  
  3. import flash.events.EventDispatcher; 
  4. import flash.display.DisplayObject; 
  5.  
  6. import index.base.events.DotEvent; 
  7.  
  8. public class Dot extends EventDispatcher{ 
  9.  
  10. private var _x:Number; 
  11. private var _y:Number; 
  12. private var _r:Number; 
  13. private var dis:DisplayObject; 
  14.  
  15. public var isListen:Boolean; 
  16.  
  17. public function Dot(x_:Number = 0,y_:Number = 0,r_:Number = 0,_isListen:Boolean = false){ 
  18. _x = x_
  19. _y = y_
  20. _r = r_
  21. isListen = _isListen
  22.  
  23. //绑定DisplayObject 
  24. public function bind(_dis:DisplayObject,isInTime:Boolean = false):void{ 
  25. dis = _dis
  26. updata(); 
  27. if(isInTime) dis.addEventListener("enterFrame",enterFrameFun); 
  28.  
  29. //帧频繁事件 
  30. private function enterFrameFun(e:Object):void{ 
  31. if(_x != dis.x) x = dis.x; 
  32. if(_y != dis.y) y = dis.y; 
  33. if(_r != dis.rotation) r = dis.rotation; 
  34.  
  35. //更新xy数据 
  36. public function updata():void{ 
  37. if(dis != null){ 
  38. _x = dis.x; 
  39. _y = dis.y; 
  40. _r = dis.rotation; 
  41.  
  42. //计算该点向R方向前进某距离后的点 
  43. public function go(num:Number,isChange:Boolean = false):Dot{ 
  44. updata(); 
  45. var yx:Number = Math.tan(_r * Math.PI / 180); 
  46. var tmpx:Number = num / Math.sqrt(Math.pow(yx,2) 1); 
  47. var tmpy:Number = tmpx * yx; 
  48. var n:int = Number(Math.abs(_r) <= 90) * 2 - 1; 
  49. var dot:Dot = new Dot(_x tmpx * n,_y tmpy * n,_r); 
  50. if(isChange){ 
  51. x = dot.x; 
  52. y = dot.y; 
  53. return dot; 
  54.  
  55. //计算该点与另外一点的距离 
  56. public function from(_dot:Dot,isQuadrant:Boolean = false):Number{ 
  57. updata(); 
  58. var num:Number = Math.sqrt(Math.pow(_dot.x - _x,2) Math.pow(_dot.y - _y,2)); 
  59. if(!isQuadrant) num = Math.abs(num); 
  60. return num; 
  61.  
  62. //计算该点与另外一点所形成的线段与水平线的夹角,按顺时间计算 
  63. public function angle(_dot:Dot,isRadian:Boolean = false):Number{ 
  64. updata(); 
  65. var numx:Number = _dot.x - _x; 
  66. var numy:Number = _dot.y - _y; 
  67. var num:Number = Math.atan(numy/numx); 
  68. if(!isRadian) numnum = num * 180 / Math.PI; 
  69. return num; 
  70.  
  71. //返回当前点处在另外一点的哪个象限中 或 返回另外一点处在当前点的哪个象限中 
  72. public function quadrant(_dot:Dot,isMaster:Boolean = true):int{ 
  73. updata(); 
  74. if(_x == _dot.x || _y == _dot.y){ 
  75. return 0; 
  76.  
  77. var num:int; 
  78. var p1:Boolean = (_x - _dot.x) > 0; 
  79. var p2:Boolean = (_y - _dot.y) > 0; 
  80. num = isMaster ? (p1 ? (p2 ? 2 : 3) : (p2 ? 1 : 4)) : (p1 ? (p2 ? 4 : 1) : (p2 ? 3 : 2)); 
  81.  
  82. return num; 
  83.  
  84. //返回该点距0点的距离 
  85. public function get length():Number{ 
  86. updata(); 
  87. var num:Number = Math.sqrt(Math.pow(_x,2) Math.pow(_y,2)); 
  88. return num; 
  89.  
  90. //清除显示对象 
  91. public function clear():void{ 
  92. dis = null
  93.  
  94. //改变旋转值 
  95. public function set r(num:Number):void{ 
  96. _r = num
  97. if(dis != null) dis.rotation = num
  98. if(isListen) dispatchEvent(new DotEvent(DotEvent.R_CHANGE,true)); 
  99.  
  100. //改变旋转值 
  101. public function get r():Number{ 
  102. updata(); 
  103. return _r; 
  104.  
  105. //改变X坐标 
  106. public function set x(num:Number):void{ 
  107. _x = num
  108. if(dis != null) dis.x = num
  109. if(isListen) dispatchEvent(new DotEvent(DotEvent.X_CHANGE,true)); 
  110.  
  111. //设置X坐标 
  112. public function get x():Number{ 
  113. updata(); 
  114. return _x; 
  115.  
  116. //改变Y坐标 
  117. public function set y(num:Number):void{ 
  118. _y = num
  119. if(dis != null) dis.y = num
  120. if(isListen) dispatchEvent(new DotEvent(DotEvent.Y_CHANGE,true)); 
  121.  
  122. //设置Y坐标 
  123. public function get y():Number{ 
  124. updata(); 
  125. return _y; 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器