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

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

时间:2017-05-08 09:57codesky
[AS3]Direction类和Dot类的一个用法范例值得学习

本篇只对Direction类的方法属性和Dot的更新部分讲解

首先是
index.base.game.Direction类
作用:控制飞机游戏,坦克游戏,或者一些和方向有关的方向按键操作

构造函数:
public function Direction(_area:InteractiveObject,isSole:Boolean = false,_up:uint = 38,_down:uint = 40,_left:uint = 37,_right:uint = 39)
参数一:方向键的作用区域,如果_area当前不是焦点,那么是侦听不到键盘事件的,一般这儿都是使用Stage做为作用区域
参数二:是否为单向事件触发,如果为false,那么按了什么键就是什么,可以同时触发上和左等两个或者两个以上的事件,反之以最后按的那个键为准
参数三,四,五,六:按键的键值,默认为38,40,37,39,分别是方向键的上下左右!

start方法:
public function start():void
开始捕获事件,当触发构造函数,将自动执行start方法

stop方法:
public function stop():void
停止捕获事件

setKey方法:
public function setKey(num:uint,vars:uint):void
设置按键键值
参数一:方向键标识,请参考该类的常量属性
参数二:按键键值

常量属性:
public static const UP:uint = 0;
public static const DOWN:uint = 1;
public static const LEFT:uint = 2;
public static const RIGHT:uint = 3;
分别代表:上下左右的方向键标识

clear方法:
public function clear():void
清除所有方向记录

area属性:
public var area:InteractiveObject
返回作用区域

sole属性:
public var sole:Boolean
返回是否单向操作

DirectionEvent.DO事件:
当有方向键是按下去的时候,则会发布事件,事件中含有up,down,left,right,4个属性,分别表示哪几个键是按下去的!

========== 气 死 你 的 分 割 线 ==========

Dot类在前面的整理笔记中,曾经说过,这次是更新类的方法和属性
增加了旋转属性,并且可以计算当前方向的某距离后的点

以下只对更新的方法和属性进行讲解:其他的请看老的整理笔记:

go方法:
public function go(num:Number,isChange:Boolean = false):Dot
参数一,表示面向旋转方向前进多少的距离
参数二,表示是否也跟新该点基于num变化之后的点坐标

clear方法:
public function clear():void
清空绑定对象的引用

r 属性:
public function set r(num:Number):void
public function get r():Number
旋转属性的设置,如果isListener值为真,则改变旋转值会触发R_CHANGE的事件

Direction类源代码:

  1. package index.base.game{ 
  2.  
  3. import flash.events.EventDispatcher; 
  4. import flash.events.KeyboardEvent; 
  5. import flash.events.Event; 
  6. import flash.display.InteractiveObject; 
  7.  
  8. import index.base.events.DirectionEvent; 
  9.  
  10. public class Direction extends EventDispatcher{ 
  11.  
  12. //方向表示 
  13. public static const UP:uint = 0; 
  14. public static const DOWN:uint = 1; 
  15. public static const LEFT:uint = 2; 
  16. public static const RIGHT:uint = 3; 
  17.  
  18. //作用区域 
  19. public var area:InteractiveObject; 
  20. //是否单向 
  21. public var sole:Boolean; 
  22.  
  23. //上下左右键值 
  24. private const directionAr:Array = new Array(4); 
  25.  
  26. //是否上下左右 
  27. private var _up:Boolean = false; 
  28. private var _down:Boolean = false; 
  29. private var _left:Boolean = false; 
  30. private var _right:Boolean = false; 
  31.  
  32. public function Direction(_area:InteractiveObject,isSole:Boolean = false,_up:uint = 38,_down:uint = 40,_left:uint = 37,_right:uint = 39){ 
  33. area = _area; 
  34. sole = isSole; 
  35. directionAr[UP] = _up; 
  36. directionAr[DOWN] = _down; 
  37. directionAr[LEFT] = _left; 
  38. directionAr[RIGHT] = _right; 
  39. start(); 
  40. } 
  41.  
  42. //开始获取事件 
  43. public function start():void{ 
  44. area.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown); 
  45. area.addEventListener(KeyboardEvent.KEY_UP,onKeyUp); 
  46. area.addEventListener(Event.ENTER_FRAME,onEnterFrame); 
  47. } 
  48.  
  49. //事件帧频繁触发 
  50. private function onEnterFrame(e:Event):void{ 
  51. var num:uint = Number(_up) Number(_down) Number(_left) Number(_right); 
  52. if(num == 0){ 
  53. return; 
  54. } 
  55.  
  56. var eve:DirectionEvent = new DirectionEvent(DirectionEvent.DO); 
  57. eve.up = _up; 
  58. eve.down = _down; 
  59. eve.left = _left; 
  60. eve.right = _right; 
  61. dispatchEvent(eve); 
  62. } 
  63.  
  64. //停止获取事件 
  65. public function stop():void{ 
  66. area.removeEventListener(KeyboardEvent.KEY_DOWN,onKeyDown); 
  67. area.removeEventListener(KeyboardEvent.KEY_UP,onKeyUp); 
  68. area.removeEventListener(Event.ENTER_FRAME,onEnterFrame); 
  69. } 
  70.  
  71. //鼠标按下去事件 
  72. private function onKeyDown(e:KeyboardEvent):void{ 
  73. key(e.keyCode,true) 
  74. } 
  75.  
  76. //鼠标弹上来事件 
  77. private function onKeyUp(e:KeyboardEvent):void{ 
  78. key(e.keyCode,false) 
  79. } 
  80.  
  81. //变化状态 
  82. private function key(num:uint,isDown:Boolean):void{ 
  83. switch(num){ 
  84. case directionAr[UP]: 
  85. if(sole) clear(); 
  86. _up = isDown; 
  87. break; 
  88. case directionAr[DOWN]: 
  89. if(sole) clear(); 
  90. _down = isDown; 
  91. break; 
  92. case directionAr[LEFT]: 
  93. if(sole) clear(); 
  94. _left = isDown; 
  95. break; 
  96. case directionAr[RIGHT]: 
  97. if(sole) clear(); 
  98. _right = isDown; 
  99. break; 
  100. } 
  101. } 
  102.  
  103. //设置按钮 
  104. public function setKey(num:uint,vars:uint):void{ 
  105. directionAr[num] = vars; 
  106. } 
  107.  
  108. //清空按键 
  109. public function clear():void{ 
  110. _up = _down = _left = _right = false; 
  111. } 
  112. } 
  113. } 

热门文章推荐

请稍候...

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

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