·您当前的位置:首页 > 技术教程 > 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.  
  24. //绑定DisplayObject 
  25. public function bind(_dis:DisplayObject,isInTime:Boolean = false):void{ 
  26. dis = _dis; 
  27. updata(); 
  28. if(isInTime) dis.addEventListener("enterFrame",enterFrameFun); 
  29. } 
  30.  
  31. //帧频繁事件 
  32. private function enterFrameFun(e:Object):void{ 
  33. if(_x != dis.x) x = dis.x; 
  34. if(_y != dis.y) y = dis.y; 
  35. if(_r != dis.rotation) r = dis.rotation; 
  36. } 
  37.  
  38. //更新xy数据 
  39. public function updata():void{ 
  40. if(dis != null){ 
  41. _x = dis.x; 
  42. _y = dis.y; 
  43. _r = dis.rotation; 
  44. } 
  45. } 
  46.  
  47. //计算该点向R方向前进某距离后的点 
  48. public function go(num:Number,isChange:Boolean = false):Dot{ 
  49. updata(); 
  50. var yx:Number = Math.tan(_r * Math.PI / 180); 
  51. var tmpx:Number = num / Math.sqrt(Math.pow(yx,2) 1); 
  52. var tmpy:Number = tmpx * yx; 
  53. var n:int = Number(Math.abs(_r) <= 90) * 2 - 1; 
  54. var dot:Dot = new Dot(_x tmpx * n,_y tmpy * n,_r); 
  55. if(isChange){ 
  56. x = dot.x; 
  57. y = dot.y; 
  58. } 
  59. return dot; 
  60. } 
  61.  
  62. //计算该点与另外一点的距离 
  63. public function from(_dot:Dot,isQuadrant:Boolean = false):Number{ 
  64. updata(); 
  65. var num:Number = Math.sqrt(Math.pow(_dot.x - _x,2) Math.pow(_dot.y - _y,2)); 
  66. if(!isQuadrant) num = Math.abs(num); 
  67. return num; 
  68. } 
  69.  
  70. //计算该点与另外一点所形成的线段与水平线的夹角,按顺时间计算 
  71. public function angle(_dot:Dot,isRadian:Boolean = false):Number{ 
  72. updata(); 
  73. var numx:Number = _dot.x - _x; 
  74. var numy:Number = _dot.y - _y; 
  75. var num:Number = Math.atan(numy/numx); 
  76. if(!isRadian) numnum = num * 180 / Math.PI; 
  77. return num; 
  78. } 
  79.  
  80. //返回当前点处在另外一点的哪个象限中 或 返回另外一点处在当前点的哪个象限中 
  81. public function quadrant(_dot:Dot,isMaster:Boolean = true):int{ 
  82. updata(); 
  83. if(_x == _dot.x || _y == _dot.y){ 
  84. return 0; 
  85. } 
  86.  
  87. var num:int; 
  88. var p1:Boolean = (_x - _dot.x) > 0; 
  89. var p2:Boolean = (_y - _dot.y) > 0; 
  90. num = isMaster ? (p1 ? (p2 ? 2 : 3) : (p2 ? 1 : 4)) : (p1 ? (p2 ? 4 : 1) : (p2 ? 3 : 2)); 
  91.  
  92. return num; 
  93. } 
  94.  
  95. //返回该点距0点的距离 
  96. public function get length():Number{ 
  97. updata(); 
  98. var num:Number = Math.sqrt(Math.pow(_x,2) Math.pow(_y,2)); 
  99. return num; 
  100. } 
  101.  
  102. //清除显示对象 
  103. public function clear():void{ 
  104. dis = null; 
  105. } 
  106.  
  107. //改变旋转值 
  108. public function set r(num:Number):void{ 
  109. _r = num; 
  110. if(dis != null) dis.rotation = num; 
  111. if(isListen) dispatchEvent(new DotEvent(DotEvent.R_CHANGE,true)); 
  112. } 
  113.  
  114. //改变旋转值 
  115. public function get r():Number{ 
  116. updata(); 
  117. return _r; 
  118. } 
  119.  
  120. //改变X坐标 
  121. public function set x(num:Number):void{ 
  122. _x = num; 
  123. if(dis != null) dis.x = num; 
  124. if(isListen) dispatchEvent(new DotEvent(DotEvent.X_CHANGE,true)); 
  125. } 
  126.  
  127. //设置X坐标 
  128. public function get x():Number{ 
  129. updata(); 
  130. return _x; 
  131. } 
  132.  
  133. //改变Y坐标 
  134. public function set y(num:Number):void{ 
  135. _y = num; 
  136. if(dis != null) dis.y = num; 
  137. if(isListen) dispatchEvent(new DotEvent(DotEvent.Y_CHANGE,true)); 
  138. } 
  139.  
  140. //设置Y坐标 
  141. public function get y():Number{ 
  142. updata(); 
  143. return _y; 
  144. } 
  145. } 
  146. } 

 

热门文章推荐

请稍候...

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

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