使用 Rectangle 对象

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

Rectangle 对象定义一个矩形区域。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 对象的 xy 属性直接重新定位该对象。此更改不会影响 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 对象的 lefttop 属性时,将重新定位该矩形。矩形的 xy 属性分别与 lefttop 属性匹配。然而,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 对象的 bottomright 属性,该对象左上角的位置不发生改变。矩形相应地调整了大小:

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 对象作为参数,而不是将 xy 偏移量值作为参数。

还可以使用 inflate() 方法调整 Rectangle 对象的大小,该方法包含两个参数,dxdydx 参数表示矩形的左侧和右侧距离中心的像素数。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 对象作为参数,而不是将 dxdy 的值作为参数。

确定 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 是否与由 target1target2 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 对象可用于以下方法和属性:

方法或属性

说明

BitmapData

applyFilter()、colorTransform()、copyChannel()、copyPixels()、draw()、fillRect()、generateFilterRect()、getColorBoundsRect()、getPixels()、merge()、paletteMap()、pixelDissolve()、setPixels() 和 threshold()

用作某些参数的类型以定义 BitmapData 对象的区域。

DisplayObject

getBounds()、getRect()、scrollRect、scale9Grid

用作属性的数据类型或返回的数据类型。

PrintJob

addPage()

用于定义 printArea 参数。

Sprite

startDrag()

用于定义 bounds 参数。

TextField

getCharBoundaries()

用作返回值类型。

Transform

pixelBounds

用作数据类型。