Rectangle類詳解


 

一,概括:

乍一看,可能感覺是一個矩形類,矩形類就是畫一個長方形嗎??這是我一開始見到這個類的感覺。

其實不是的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,復制方法

clone():Rectangle

這個方法也很簡單,就是復雜類型對象的復制。

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,判斷區域是否為空

isEmpty():Boolean

這里空的意思,可以理解為區域的面積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,清零

setEmpty():void

描述是將Rectangle所有屬性清零,就是4大基本屬性x,y,width,height都為0

15,輸出

toString():String

沒啥特別的,就是一個轉String類型時調用的方法。輸出4大基本屬性x,y,width,height

16,合並區域

union(toUnion:Rectangle):Rectangle

將兩個區域合並,聽上去好像很不錯,但是別高興太早,這個合並可不像Photoshop里的合並多個選擇區域那種合並。這個合並區域是合出一個大矩形···囧···就是返回一個大矩形剛剛好包含了兩個矩形。

 

總結:

總的來說Rectangle類並不難掌握。

其中公共屬性就是4大屬性x,y,width,height。

而公共方法主要分作三大功能:

1,改變4大屬性,如inflateinflatePointsetEmpty

2,判斷包含,如containscontainsPointcontainsRectequals

3,相交,相並操作,如intersectionintersectsunion

4,還有就是剩下一些雜七雜八的小功能。

但Rectangle作為運算類,可能沒有太多精彩的玩法。但是卻是很多算法的基石。例如模擬即時戰略的選取功能等等。還有類似BitmapData運算中限制變化的區域以達到優化的目的等等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM