亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 辦公 > Flash > 正文

Flash AS3教程:Direction類和Dot類

2020-07-17 13:17:37
字體:
來源:轉載
供稿:網友
前面講述了Flash as3教程:OutDisplay類,本篇對Direction類的方法屬性和Dot的更新部分講解。
關于該例子的教程請關注第九篇筆記!
即將出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類源代碼:

CODE:
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;
}
}
}
Dot類源代碼:

CODE:
package index.base.geom{

import flash.events.EventDispatcher;
import flash.display.DisplayObject;

import index.base.events.DotEvent;

public class Dot extends EventDispatcher{

private var _x:Number;
private var _y:Number;
private var _r:Number;
private var dis:DisplayObject;

public var isListen:Boolean;

public function Dot(x_:Number = 0,y_:Number = 0,r_:Number = 0,_isListen:Boolean = false){
_x = x_;
_y = y_;
_r = r_;
isListen = _isListen;
}

//綁定DisplayObject
public function bind(_dis:DisplayObject,isInTime:Boolean = false):void{
dis = _dis;
updata();
if(isInTime) dis.addEventListener("enterFrame",enterFrameFun);
}

//幀頻繁事件
private function enterFrameFun(e:Object):void{
if(_x != dis.x) x = dis.x;
if(_y != dis.y) y = dis.y;
if(_r != dis.rotation) r = dis.rotation;
}

//更新xy數據
public function updata():void{
if(dis != null){
_x = dis.x;
_y = dis.y;
_r = dis.rotation;
}
}

//計算該點向R方向前進某距離后的點
public function go(num:Number,isChange:Boolean = false):Dot{
updata();
var yx:Number = Math.tan(_r * Math.PI / 180);
var tmpx:Number = num / Math.sqrt(Math.pow(yx,2) 1);
var tmpy:Number = tmpx * yx;
var n:int = Number(Math.abs(_r) <= 90) * 2 - 1;
var dot:Dot = new Dot(_x tmpx * n,_y tmpy * n,_r);
if(isChange){
x = dot.x;
y = dot.y;
}
return dot;
}

//計算該點與另外一點的距離
public function from(_dot:Dot,isQuadrant:Boolean = false):Number{
updata();
var num:Number = Math.sqrt(Math.pow(_dot.x - _x,2) Math.pow(_dot.y - _y,2));
if(!isQuadrant) num = Math.abs(num);
return num;
}

//計算該點與另外一點所形成的線段與水平線的夾角,按順時間計算
public function angle(_dot:Dot,isRadian:Boolean = false):Number{
updata();
var numx:Number = _dot.x - _x;
var numy:Number = _dot.y - _y;
var num:Number = Math.atan(numy/numx);
if(!isRadian) num = num * 180 / Math.PI;
return num;
}

//返回當前點處在另外一點的哪個象限中 或 返回另外一點處在當前點的哪個象限中
public function quadrant(_dot:Dot,isMaster:Boolean = true):int{
updata();
if(_x == _dot.x || _y == _dot.y){
return 0;
}

var num:int;
var p1:Boolean = (_x - _dot.x) > 0;
var p2:Boolean = (_y - _dot.y) > 0;
num = isMaster ? (p1 ? (p2 ? 2 : 3) : (p2 ? 1 : 4)) : (p1 ? (p2 ? 4 : 1) : (p2 ? 3 : 2));

return num;
}

//返回該點距0點的距離
public function get length():Number{
updata();
var num:Number = Math.sqrt(Math.pow(_x,2) Math.pow(_y,2));
return num;
}

//清除顯示對象
public function clear():void{
dis = null;
}

//改變旋轉值
public function set r(num:Number):void{
_r = num;
if(dis != null) dis.rotation = num;
if(isListen) dispatchEvent(new DotEvent(DotEvent.R_CHANGE,true));
}

//改變旋轉值
public function get r():Number{
updata();
return _r;
}

//改變X坐標
public function set x(num:Number):void{
_x = num;
if(dis != null) dis.x = num;
if(isListen) dispatchEvent(new DotEvent(DotEvent.X_CHANGE,true));
}

//設置X坐標
public function get x():Number{
updata();
return _x;
}

//改變Y坐標
public function set y(num:Number):void{
_y = num;
if(dis != null) dis.y = num;
if(isListen) dispatchEvent(new DotEvent(DotEvent.Y_CHANGE,true));
}

//設置Y坐標
public function get y():Number{
updata();
return _y;
}
}
}

上一頁12 下一頁 閱讀全文
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人高潮女人毛茸茸| 欧美激情高清视频| 欧美乱人伦中文字幕在线| 色狠狠av一区二区三区香蕉蜜桃| 国产精品一区专区欧美日韩| 日韩免费高清在线观看| 中文字幕亚洲欧美日韩高清| 久久久久久久国产精品视频| 国产69精品久久久久久| 国产婷婷97碰碰久久人人蜜臀| 亚洲色图国产精品| 中文字幕亚洲一区二区三区| 国产午夜精品理论片a级探花| 欧美视频免费在线| 97视频在线观看成人| 伊人伊成久久人综合网小说| 中文.日本.精品| 久久久免费观看| 国产精品久久久av| 欧美中文在线字幕| 国产精品久久久久久久美男| 日韩av一区二区在线观看| 欧美极度另类性三渗透| 国产91精品高潮白浆喷水| 久久久免费精品| 欧美有码在线观看视频| 日韩中文字幕视频在线| 大量国产精品视频| 免费av在线一区| 国产精品爽黄69| 亚洲天堂第一页| 亚洲成人免费网站| 中文字幕九色91在线| 亚洲aⅴ男人的天堂在线观看| 成人久久18免费网站图片| 久久久久女教师免费一区| 国产精品精品视频一区二区三区| 在线日韩精品视频| 91伊人影院在线播放| 成人亚洲综合色就1024| 欧美国产乱视频| 精品无人区乱码1区2区3区在线| 日韩视频免费中文字幕| 日本高清不卡的在线| 欧美巨猛xxxx猛交黑人97人| 亚洲高清一二三区| 日韩av综合网| 亚洲精品国产精品国产自| 国产精品电影久久久久电影网| 日韩精品一二三四区| 欧美国产乱视频| 成人免费视频a| 在线观看日韩www视频免费| 一区二区三区高清国产| 欧美成人精品激情在线观看| 成人免费福利在线| 国产精品日韩在线播放| 亚洲最大福利视频网站| 亚洲国内高清视频| 亚洲一区二区久久久| 综合国产在线观看| 欧美国产在线视频| 久久久视频在线| 久久在线精品视频| 精品国内产的精品视频在线观看| 欧美小视频在线观看| 久久99视频免费| 成人欧美一区二区三区在线湿哒哒| 91精品久久久久久久久不口人| 另类图片亚洲另类| 欧美午夜性色大片在线观看| 国产精品激情av在线播放| 亚洲毛片在线观看| 欧美成人精品在线播放| 欧美在线一区二区三区四| 亚洲成**性毛茸茸| 庆余年2免费日韩剧观看大牛| 亚洲第一精品夜夜躁人人爽| 国产精品福利片| 韩国一区二区电影| 日韩中文字幕在线播放| 亚洲国产欧美在线成人app| 精品调教chinesegay| 91精品久久久久久久久久久| 亚洲欧美制服中文字幕| 综合国产在线观看| 亚洲丝袜av一区| 亚洲欧洲第一视频| 亚洲在线一区二区| 国产在线视频不卡| 亚洲电影免费观看高清完整版在线观看| 96精品视频在线| 亚洲欧美另类中文字幕| 亚洲人成在线观| 欧美天天综合色影久久精品| 日韩精品中文字幕在线播放| 亚洲精品视频播放| 亚洲片国产一区一级在线观看| 亚洲第一黄色网| 欧美午夜激情小视频| 日韩第一页在线| 国产精品久久久久久超碰| 国产日韩欧美日韩| 国产精品1区2区在线观看| 青青草一区二区| 日本国产一区二区三区| 九九热精品视频| 欧美在线www| 在线观看视频99| 欧美一级大胆视频| 国产成人综合精品| 久久国内精品一国内精品| 4p变态网欧美系列| 久久久久久网址| 久久久精品美女| 成人免费看黄网站| 欧美激情在线观看| 国产成人在线一区| 成人免费视频在线观看超级碰| 国产福利精品视频| 亚洲视频在线观看| 亚洲久久久久久久久久久| 国内精品久久久久影院 日本资源| 不卡av在线网站| 日韩av在线影视| 91网站免费看| 国产中文欧美精品| 国产激情视频一区| 国产精品av电影| 欧美大尺度电影在线观看| 久久久久久12| www欧美xxxx| 亚洲加勒比久久88色综合| 国产精品毛片a∨一区二区三区|国| 亚洲电影中文字幕| 91精品国产综合久久久久久久久| 久久久精品在线| 亚州国产精品久久久| 精品久久久精品| 91九色蝌蚪国产| 最近2019中文字幕mv免费看| 精品久久久久久久久久久| 全亚洲最色的网站在线观看| 免费97视频在线精品国自产拍| 欧美激情一区二区三区久久久| 国产精品自产拍高潮在线观看| 国产欧美日韩精品专区| 91精品国产91久久久久| 欧美综合一区第一页| 日韩中文字幕视频在线| 亚洲国产精品yw在线观看| 欧美日韩亚洲精品内裤| 日韩av电影在线播放| 国产精品一久久香蕉国产线看观看| 91欧美精品成人综合在线观看| 欧美日韩亚洲一区二区三区| 亚洲国产高清高潮精品美女| 欧美日韩亚洲网| 美女精品视频一区| 久久人人爽人人爽爽久久| 久久精品国产亚洲精品| 久久久综合av| 欧美裸体视频网站| 成人免费观看49www在线观看|