一,概括:
乍一看,可能感覺是一個矩形類,矩形類就是畫一個長方形嗎??這是我一開始見到這個類的感覺。
其實不是的Rectangle是一個“區域”類,它的最大作用就是定義一個矩形的區域,如果問為什么是矩形,不是圓形,三角形···Anyway···因為從程序的角度來說,矩形是最適合表示的。
Rectangle類其實之前在介紹Bitmapdata的時候大家也不陌生了,很多Bitmapdata變化區域的界定就是靠的他。這次詳細的講解主要是對他的一些運算API做一個了解。
Rectangle類屬於geom包,geom是geometry(幾何)的縮寫,同屬這個包的還有Point類,這個包里放的也都是一些數學運算的概念類。Rectangle直接繼承Object對象,所以沒有太多父類東西要了解。一共有11個公共屬性,16個公共方法。看似很多,其實很多都很容易理解。
二,公共屬性:
分兩部分來,一部分是直接可得的,一部分是可以運算但是AS3已經內部計算好可以直接調用的。
第一部分:
1,x:就是區域的x坐標。(左上角)
2,y:就是區域的y坐標。(左上角)
3,width:區域的寬
4,height:區域的高
第二部分:
5,top:區域的頂的y坐標,其實就是y
6,bottom:區域底的y坐標,其實就是y+height
7,left:區域左邊緣的x坐標,其實就是x
8,right:區域右邊緣的x坐標,其實就是x+width
9,topLeft:一個point對象,記錄了左上角的位置,可以讀寫(即可以通過給這個屬性賦值一個point對象來設置x,y值)
10,rightBottom:也是一個point對象,記錄了右下角位置,可以讀寫(即可以通過給這個對象賦值,配合topLeft一起修改Rectangle的width,height,bottom,right屬性)
11,size:還是一個point對象,記錄了區域的長寬,可以讀寫(即可以通過賦值,直觀的改變區域的長寬,間接改變了面積)。
雖然有11個公共屬性,可是核心的也就x,y,width,height四個,其他的完全可以通過簡單的數學運算取代。不過如果能熟練運用其他的7個公共屬性也不錯。修改起來也更加直觀。
三,公共方法:
1,構造方法
Rectangle(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0)
這個構造方法很好理解,直接設置了核心的4個公共屬性。
2,復制方法
這個方法也很簡單,就是復雜類型對象的復制。
3,判斷某個點是否在區域內(方法1)
contains(x:Number, y:Number):Boolean
很直觀,輸入點的坐標x,y,返回Boolen值
4,判斷某個點是否在區域內(方法2)
containsPoint(point:Point):Boolean
跟contains()完全一樣的作用,只不過參數換成了一個point對象。
5,判斷區域A是否包含另外一個區域B
containsRect(rect:Rectangle):Boolean
這里的包含,是指完全包住,即成一個“回”字型。
6,判斷兩個區域是否相等
equals(toCompare:Rectangle):Boolean
這里的相等,不是指是否同一個對象的相等,而是指構成兩個區域的4要素:x,y,width,height完全相等。如果完全相等這返回true
7,改變區域大小(方法1)
inflate(dx:Number, dy:Number):void
inflate的意思是膨脹。有人可能好奇,增加大小直接設置width和height不就好了嗎?這個方法的不同是,他是以區域的中心點,向左右上下各增長dx,dy的,內部的運算其實是:
x -= dx;
width += 2 * dx;
y -= dy;
height += 2 * dy;
PS:dx,dy可以輸入負數做參數,這樣就達到了縮小區域的目的。
8,改變區域大小(方法2)
inflatePoint(point:Point):void
跟inflate()一樣作用,只是參數換成了point而已。
9,兩區域取交集
intersection(toIntersect:Rectangle):Rectangle
標題其實已經說出了這個方法的作用,就是取得兩個區域的交集,即返回相交部分的區域。
10,判斷兩區域是否相交
intersects(toIntersect:Rectangle):Boolean
這個函數和intersection()很容易混淆,因為根本就是同一個詞的不同詞性,一個是名詞一個是動詞。不過還好看返回值還是能清晰分出的。這個方法就是判斷兩區域是否相交。
11,判斷區域是否為空
這里空的意思,可以理解為區域的面積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()作用一樣,只是參數換成了point
14,清零
描述是將Rectangle所有屬性清零,就是4大基本屬性x,y,width,height都為0
15,輸出
沒啥特別的,就是一個轉String類型時調用的方法。輸出4大基本屬性x,y,width,height
16,合並區域
union(toUnion:Rectangle):Rectangle
將兩個區域合並,聽上去好像很不錯,但是別高興太早,這個合並可不像Photoshop里的合並多個選擇區域那種合並。這個合並區域是合出一個大矩形···囧···就是返回一個大矩形剛剛好包含了兩個矩形。
總結:
總的來說Rectangle類並不難掌握。
其中公共屬性就是4大屬性x,y,width,height。
而公共方法主要分作三大功能:
1,改變4大屬性,如inflate,inflatePoint,setEmpty
2,判斷包含,如contains,containsPoint,containsRect,equals
3,相交,相並操作,如intersection,intersects,union
4,還有就是剩下一些雜七雜八的小功能。
但Rectangle作為運算類,可能沒有太多精彩的玩法。但是卻是很多算法的基石。例如模擬即時戰略的選取功能等等。還有類似BitmapData運算中限制變化的區域以達到優化的目的等等。