·您当前的位置:主页 > 技术教程 > 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. public function start():void{ 
  43. area.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown); 
  44. area.addEventListener(KeyboardEvent.KEY_UP,onKeyUp); 
  45. area.addEventListener(Event.ENTER_FRAME,onEnterFrame); 
  46.  
  47. //事件帧频繁触发 
  48. private function onEnterFrame(e:Event):void{ 
  49. var num:uint = Number(_up) Number(_down) Number(_left) Number(_right); 
  50. if(num == 0){ 
  51. return; 
  52.  
  53. var eve:DirectionEvent = new DirectionEvent(DirectionEvent.DO); 
  54. eve.up = _up
  55. eve.down = _down
  56. eve.left = _left
  57. eve.right = _right
  58. dispatchEvent(eve); 
  59.  
  60. //停止获取事件 
  61. public function stop():void{ 
  62. area.removeEventListener(KeyboardEvent.KEY_DOWN,onKeyDown); 
  63. area.removeEventListener(KeyboardEvent.KEY_UP,onKeyUp); 
  64. area.removeEventListener(Event.ENTER_FRAME,onEnterFrame); 
  65.  
  66. //鼠标按下去事件 
  67. private function onKeyDown(e:KeyboardEvent):void{ 
  68. key(e.keyCode,true) 
  69.  
  70. //鼠标弹上来事件 
  71. private function onKeyUp(e:KeyboardEvent):void{ 
  72. key(e.keyCode,false) 
  73.  
  74. //变化状态 
  75. private function key(num:uint,isDown:Boolean):void{ 
  76. switch(num){ 
  77. case directionAr[UP]: 
  78. if(sole) clear(); 
  79. _up = isDown
  80. break; 
  81. case directionAr[DOWN]: 
  82. if(sole) clear(); 
  83. _down = isDown
  84. break; 
  85. case directionAr[LEFT]: 
  86. if(sole) clear(); 
  87. _left = isDown
  88. break; 
  89. case directionAr[RIGHT]: 
  90. if(sole) clear(); 
  91. _right = isDown
  92. break; 
  93.  
  94. //设置按钮 
  95. public function setKey(num:uint,vars:uint):void{ 
  96. directionAr[num] = vars; 
  97.  
  98. //清空按键 
  99. public function clear():void{ 
  100. _up = _down = _left = _right = false; 

保利威视云直播提供稳定流畅,高画质,低延迟的直播服务

酷播云服务,酷播云