[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类源代码:
- package index.base.game{
- import flash.events.EventDispatcher;
- import flash.events.KeyboardEvent;
- import flash.events.Event;
- import flash.display.InteractiveObject;
- import index.base.events.DirectionEvent;
- public class Direction extends EventDispatcher{
- //方向表示
- public static const UP:uint = 0;
- public static const DOWN:uint = 1;
- public static const LEFT:uint = 2;
- public static const RIGHT:uint = 3;
- //作用区域
- public var area:InteractiveObject;
- //是否单向
- public var sole:Boolean;
- //上下左右键值
- private const directionAr:Array = new Array(4);
- //是否上下左右
- private var _up:Boolean = false;
- private var _down:Boolean = false;
- private var _left:Boolean = false;
- private var _right:Boolean = false;
- public function Direction(_area:InteractiveObject,isSole:Boolean = false,_up:uint = 38,_down:uint = 40,_left:uint = 37,_right:uint = 39){
- area = _area;
- sole = isSole;
- directionAr[UP] = _up;
- directionAr[DOWN] = _down;
- directionAr[LEFT] = _left;
- directionAr[RIGHT] = _right;
- start();
- }
- //开始获取事件
- public function start():void{
- area.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
- area.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
- area.addEventListener(Event.ENTER_FRAME,onEnterFrame);
- }
- //事件帧频繁触发
- private function onEnterFrame(e:Event):void{
- var num:uint = Number(_up) Number(_down) Number(_left) Number(_right);
- if(num == 0){
- return;
- }
- var eve:DirectionEvent = new DirectionEvent(DirectionEvent.DO);
- eve.up = _up;
- eve.down = _down;
- eve.left = _left;
- eve.right = _right;
- dispatchEvent(eve);
- }
- //停止获取事件
- public function stop():void{
- area.removeEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
- area.removeEventListener(KeyboardEvent.KEY_UP,onKeyUp);
- area.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
- }
- //鼠标按下去事件
- private function onKeyDown(e:KeyboardEvent):void{
- key(e.keyCode,true)
- }
- //鼠标弹上来事件
- private function onKeyUp(e:KeyboardEvent):void{
- key(e.keyCode,false)
- }
- //变化状态
- private function key(num:uint,isDown:Boolean):void{
- switch(num){
- case directionAr[UP]:
- if(sole) clear();
- _up = isDown;
- break;
- case directionAr[DOWN]:
- if(sole) clear();
- _down = isDown;
- break;
- case directionAr[LEFT]:
- if(sole) clear();
- _left = isDown;
- break;
- case directionAr[RIGHT]:
- if(sole) clear();
- _right = isDown;
- break;
- }
- }
- //设置按钮
- public function setKey(num:uint,vars:uint):void{
- directionAr[num] = vars;
- }
- //清空按键
- public function clear():void{
- _up = _down = _left = _right = false;
- }
- }
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例