使用 Rectangle 对象

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 对象的其它用法

调整 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=30, y=20, w=70, h=30)

同样,如下面的示例所示,如果更改 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 对象作为参数,而不是将 x 和 y 偏移量值作为参数。

还可以使用 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

用作数据类型。


Flash CS3

 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000187.html