一,概括:
乍一看,可能感覺是一個矩形類,矩形類就是畫一個長方形嗎??這是我一開始見到這個類的感覺。
其實不是的Rectangle是一個“區(qū)域”類,它的最大作用就是定義一個矩形的區(qū)域,如果問為什么是矩形,不是圓形,三角形···Anyway···因為從程序的角度來說,矩形是最適合表示的。
Rectangle類其實之前在介紹Bitmapdata的時候大家也不陌生了,很多Bitmapdata變化區(qū)域的界定就是靠的他。這次詳細(xì)的講解主要是對他的一些運(yùn)算API做一個了解。
Rectangle類屬于geom包,geom是geometry(幾何)的縮寫,同屬這個包的還有Point類,這個包里放的也都是一些數(shù)學(xué)運(yùn)算的概念類。Rectangle直接繼承Object對象,所以沒有太多父類東西要了解。一共有11個公共屬性,16個公共方法??此坪芏?,其實很多都 很容易理解。
二,公共屬性:
分兩部分來,一部分是直接可得的,一部分是可以運(yùn)算但是AS3已經(jīng)內(nèi)部計算好可以直接調(diào)用的。
第一部分:
1,x:就是區(qū)域的x坐標(biāo)。(左上角)
2,y:就是區(qū)域的y坐標(biāo)。(左上角)
3,width:區(qū)域的寬
4,height:區(qū)域的高
第二部分:
5,top:區(qū)域的頂?shù)膟坐標(biāo),其實就是y
6,bottom:區(qū)域底的y坐標(biāo),其實就是y+height
7,left:區(qū)域左邊緣的x坐標(biāo),其實就是x
8,right:區(qū)域右邊緣的x坐標(biāo),其實就是x+width
9,topLeft:一個point對象,記錄了左上角的位置,可以讀寫(即可以通過給這個屬性賦值一個point對象來設(shè)置x,y值)
10,rightBottom:也是一個point對象,記錄了右下角位置,可以讀寫(即可以通過給這個對象賦值,配合topLeft一起修改Rectangle的width,height,bottom,right屬性)
11,size:還是一個point對象,記錄了區(qū)域的長寬,可以讀寫(即可以通過賦值,直觀的改變區(qū)域的長寬,間接改變了面積)。
雖然有11個公共屬性,可是核心的也就x,y,width,height四個,其他的完全可以通過簡單的數(shù)學(xué)運(yùn)算取代。不過如果能熟練運(yùn)用其他的7個公共屬性也不錯。修改起來也更加直觀。
三,公共方法:
1,構(gòu)造方法
Rectangle(x:Number = 0, y:Number = 0, width:Number = 0,height:Number = 0)
這個構(gòu)造方法很好理解,直接設(shè)置了核心的4個公共屬性。
2,復(fù)制方法
clone():Rectangle
這個方法也很簡單,就是復(fù)雜類型對象的復(fù)制。
3,判斷某個點(diǎn)是否在區(qū)域內(nèi)(方法1)
contains(x:Number, y:Number):Boolean
很直觀,輸入點(diǎn)的坐標(biāo)x,y,返回Boolen值
4,判斷某個點(diǎn)是否在區(qū)域內(nèi)(方法2)
containsPoint(point:Point):Boolean
跟contains()完全一樣的作用,只不過參數(shù)換成了一個point對象。
5,判斷區(qū)域A是否包含另外一個區(qū)域B
containsRect(rect:Rectangle):Boolean
這里的包含,是指完全包住,即成一個“回”字型。
6,判斷兩個區(qū)域是否相等
equals(toCompare:Rectangle):Boolean
這里的相等,不是指是否同一個對象的相等,而是指構(gòu)成兩個區(qū)域的4要素:x,y,width,height完全相等。如果完全相等這返回true
7,改變區(qū)域大小(方法1)
inflate(dx:Number, dy:Number):void
inflate的意思是膨脹。有人可能好奇,增加大小直接設(shè)置width和height不就好了嗎?這個方法的不同是,他是以區(qū)域的中心點(diǎn),向左右上下各增長dx,dy的,內(nèi)部的運(yùn)算其實是:
x -= dx;
width += 2 * dx;
y -= dy;
height += 2 * dy;
PS:dx,dy可以輸入負(fù)數(shù)做參數(shù),這樣就達(dá)到了縮小區(qū)域的目的。
8,改變區(qū)域大?。ǚ椒?)
inflatePoint(point:Point):void
跟inflate()一樣作用,只是參數(shù)換成了point而已。
9,兩區(qū)域取交集
intersection(toIntersect:Rectangle):Rectangle
標(biāo)題其實已經(jīng)說出了這個方法的作用,就是取得兩個區(qū)域的交集,即返回相交部分的區(qū)域。
10,判斷兩區(qū)域是否相交
intersects(toIntersect:Rectangle):Boolean
這個函數(shù)和intersection()很容易混淆,因為根本就是同一個詞的不同詞性,一個是名詞一個是動詞。不過還好看返回值還是能清晰分出的。這個方法就是判斷兩區(qū)域是否相交。
11,判斷區(qū)域是否為空
isEmpty():Boolean
這里空的意思,可以理解為區(qū)域的面積width*height=0,即width==0 || height==0
12,位移(方法1)
offset(dx:Number, dy:Number):void
就是改變左上角的位置,其實就是改變x,y的值。具體作用為:
Rectangle.x += dx;
Rectangle.y += dy;
13,位移(方法2)
offsetPoint(point:Point):void
跟offset()作用一樣,只是參數(shù)換成了point
14,清零
setEmpty():void
描述是將Rectangle所有屬性清零,就是4大基本屬性x,y,width,height都為0
15,輸出
toString():String
沒啥特別的,就是一個轉(zhuǎn)String類型時調(diào)用的方法。輸出4大基本屬性x,y,width,height
16,合并區(qū)域
union(toUnion:Rectangle):Rectangle

將兩個區(qū)域合并,聽上去好像很不錯,但是別高興太早,這個合并可不像Photoshop里的合并多個選擇區(qū)域那種合并。這個合并區(qū)域是合出一個大矩形···囧···就是返回一個大矩形剛剛好包含了兩個矩形。
總結(jié):
總的來說Rectangle類并不難掌握。
其中公共屬性就是4大屬性x,y,width,height。
而公共方法主要分作三大功能:
1,改變4大屬性,如inflate,inflatePoint,setEmpty
2,判斷包含,如contains,containsPoint,containsRect,equals
3,相交,相并操作,如intersection,intersects,union
4,還有就是剩下一些雜七雜八的小功能。
但Rectangle作為運(yùn)算類,可能沒有太多精彩的玩法。但是卻是很多算法的基石。例如模擬即時戰(zhàn)略的選取功能等等。還有類似BitmapData運(yùn)算中限制變化的區(qū)域以達(dá)到優(yōu)化的目的等等。
一句話,不要小看數(shù)學(xué)類在編程中的重要性,編程就是玩數(shù)學(xué)
inflate(dx:Number, dy:Number)這個函數(shù)以前真的不知道-.-還一直通過matrix來修改-.-
愛華網(wǎng)



