使用 Rectangle 物件Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本 Rectangle 物件會定義矩形區域,它的位置是由本身左上角的 x 和 y 座標,以及 width 和 height 屬性所定義。您可以呼叫 Rectangle() 建構函式,定義新 Rectangle 物件的這些屬性,如下所示: import flash.geom.Rectangle; var rx:Number = 0; var ry:Number = 0; var rwidth:Number = 100; var rheight:Number = 50; var rect1:Rectangle = new Rectangle(rx, ry, rwidth, rheight); 調整 Rectangle 物件的大小及位置您可以使用多種方式來調整 Rectangle 物件的大小及位置。 您可以直接變更 Rectangle 物件的 x 和 y 屬性,來調整該物件的位置。此變更並不會影響 Rectangle 物件的寬度或高度。 import flash.geom.Rectangle; var x1:Number = 0; var y1:Number = 0; var width1:Number = 100; var height1:Number = 50; var rect1:Rectangle = new Rectangle(x1, y1, width1, height1); trace(rect1) // (x=0, y=0, w=100, h=50) rect1.x = 20; rect1.y = 30; trace(rect1); // (x=20, y=30, w=100, h=50) 顯示以下程式碼時,在您變更 Rectangle 物件的 left 或 top 屬性後,就會重新定位矩形。矩形的 x 和 y 屬性分別符合 left 和 top 屬性。但是,由於 Rectangle 物件的左下角位置不會更改,因此它的大小會改變: import flash.geom.Rectangle; var x1:Number = 0; var y1:Number = 0; var width1:Number = 100; var height1:Number = 50; var rect1:Rectangle = new Rectangle(x1, y1, width1, height1); trace(rect1) // (x=0, y=0, w=100, h=50) rect1.left = 20; rect1.top = 30; trace(rect1); // (x=20, y=30, w=80, h=20) 同樣地,如下列範例所示,若您變更 Rectangle 物件的 bottom 或 right 屬性,它的左上角位置不會更改。矩形會隨之調整大小。 import flash.geom.Rectangle; var x1:Number = 0; var y1:Number = 0; var width1:Number = 100; var height1:Number = 50; var rect1:Rectangle = new Rectangle(x1, y1, width1, height1); trace(rect1) // (x=0, y=0, w=100, h=50) rect1.right = 60; trect1.bottom = 20; trace(rect1); // (x=0, y=0, w=60, h=20) 您也可以使用 offset() 方法,重新調整 Rectangle 物件的位置,如下所示: import flash.geom.Rectangle; var x1:Number = 0; var y1:Number = 0; var width1:Number = 100; var height1:Number = 50; var rect1:Rectangle = new Rectangle(x1, y1, width1, height1); trace(rect1) // (x=0, y=0, w=100, h=50) rect1.offset(20, 30); trace(rect1); // (x=20, y=30, w=100, h=50) offsetPt() 方法具有相似的運作方式,不過它會使用 Point 物件做為它的參數,而非使用 x 和 y 偏移值。 您也可以使用 inflate() 方法 (包含 dx 和 dy 兩個參數),調整 Rectangle 物件的大小。dx 參數代表像素的數目,也就是矩形從中心點往左方或右方移動的距離。dy 參數代表像素的數目,也就是矩形從中心點往上方或下方移動的距離。 import flash.geom.Rectangle; var x1:Number = 0; var y1:Number = 0; var width1:Number = 100; var height1:Number = 50; var rect1:Rectangle = new Rectangle(x1, y1, width1, height1); trace(rect1) // (x=0, y=0, w=100, h=50) rect1.inflate(6,4); trace(rect1); // (x=-6, y=-4, w=112, h=58) inflatePt() 方法也具有相似的運作方式,不過它會使用 Point 物件做為它的參數,而非使用 dx 和 dy 值。 找出 Rectangle 物件的聯集與交集您可以使用 union() 方法,找出兩個矩形邊界所聯合形成的矩形區域: import flash.display.*; import flash.geom.Rectangle; var rect1:Rectangle = new Rectangle(0, 0, 100, 100); trace(rect1); // (x=0, y=0, w=100, h=100) var rect2:Rectangle = new Rectangle(120, 60, 100, 100); trace(rect2); // (x=120, y=60, w=100, h=100) trace(rect1.union(rect2)); // (x=0, y=0, w=220, h=160) 您可以使用 intersection() 方法,找出兩個矩形互相重疊所形成的矩形區域: import flash.display.*; import flash.geom.Rectangle; var rect1:Rectangle = new Rectangle(0, 0, 100, 100); trace(rect1); // (x=0, y=0, w=100, h=100) var rect2:Rectangle = new Rectangle(80, 60, 100, 100); trace(rect2); // (x=120, y=60, w=100, h=100) trace(rect1.intersection(rect2)); // (x=80, y=60, w=20, h=40) 您可以使用 intersects() 方法,得知兩個矩形是否互相交集。您也可以使用 intersects() 方法,得知某個顯示物件是否位於「舞台」的特定區域中。至於以下的程式碼範例,假設顯示物件容器 (其中包含 circle 物件) 的座標空間與「舞台」的座標空間相同。此範例將示範如何使用 intersects() 方法,判斷顯示物件 circle 是否與「舞台」上 target1 和 target2 Rectangle 物件所指定的區域有交集: import flash.display.*; import flash.geom.Rectangle; var circle:Shape = new Shape(); circle.graphics.lineStyle(2, 0xFF0000); circle.graphics.drawCircle(250, 250, 100); addChild(circle); var circleBounds:Rectangle = circle.getBounds(stage); var target1:Rectangle = new Rectangle(0, 0, 100, 100); trace(circleBounds.intersects(target1)); // false var target2:Rectangle = new Rectangle(0, 0, 300, 300); trace(circleBounds.intersects(target2)); // true 同樣地,您可以使用 intersects() 方法,得知兩個顯示物件的矩形邊界是否重疊。請使用 DisplayObject 類別的 getRect() 方法,將其它任何空間 (顯示物件的筆畫會將此空間加入至區域邊界) 納入。 Rectangle 物件的其它用法下列方法和屬性都會用到 Rectangle 物件:
|
|