Uso de objetos Rectangle

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

O objeto Rectangle define uma área retangular. Um objeto Rectangle tem uma posição, definida pelas coordenadas x e y de seu canto superior esquerdo, uma propriedade width e uma propriedade height . Você pode definir essas propriedades para um novo objeto Rectangle chamando a função de construtor Rectangle() da seguinte forma:

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);

Redimensionamento e reposicionamento de objetos Rectangle

Há várias formas de redimensionar e reposicionar objetos Rectangle.

Você pode reposicionar o objeto Rectangle alterando suas propriedades x e y . Essa alteração não afeta a largura ou a altura do objeto 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)

Como mostra o código a seguir, quando você altera a propriedade left ou top de um objeto Rectangle, o retângulo é reposicionado. As propriedades x e y do retângulo correspondem às propriedades left e top , respectivamente. Entretanto, a posição do canto inferior esquerdo do objeto Rectangle não é alterada, por isso ele é redimensionado.

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)

Da mesma forma, como mostra o exemplo, se você alterar a propriedade bottom ou right de um objeto Rectangle, a posição de seu canto superior esquerdo não é alterada. O retângulo é realizado corretamente:

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)

Você também pode reposicionar um objeto Rectangle usando o método offset() da seguinte maneira:

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)

O método offsetPt() funciona da mesma forma, exceto que assume um objeto Point como parâmetro, em vez dos valores de deslocamento x e y .

Você também pode redimensionar um objeto Rectangle usando o método inflate() , que inclui dois parâmetros, dx e dy . O parâmetro dx representa o número de pixels que os lados esquerdo e direito do retângulo se movem em relação ao centro. O parâmetro dy representa o número de pixels que os lados superior e inferior do retângulo se movem em relação ao centro.

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)

O método inflatePt() funciona da mesma forma, exceto que assume um objeto Point como parâmetro, em vez dos valores de deslocamento dx e dy .

Localização de uniões e interseções de objetos Rectangle

Você usa o método union() para localizar a região retangular formada pelos limites de dois retângulos:

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)

Você usa o método intersection() para localizar a região retangular formada pela região sobreposta de dois retângulos:

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)

O método intersects() é usado para descobrir se há interseção de dois retângulos. O método intersects() também pode ser usado para descobrir se um objeto de exibição está em uma determinada região do Palco. No código de exemplo a seguir, suponha que o espaço de coordenadas do contêiner de objetos de exibição que inclui o objeto circle seja o mesmo do palco. O exemplo mostra como usar o método intersects() para determinar se há interseção de um objeto de exibição, circle , com regiões especificadas do Palco, definidas pelos objetos Rectangle target1 e target2 :

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

Da mesma forma, o método intersects() pode ser usado para descobrir se os retângulos delimitadores de dois objetos de exibição se sobrepõem. Use o método getRect() da classe DisplayObject para incluir qualquer espaço adicional que os traçados de um objeto de exibição adicionam a uma região delimitadora.

Outros usos de objetos Rectangle

Os objetos Rectangle são usados nos seguintes métodos e propriedades:

Classe

Métodos ou propriedades

Descrição

BitmapData

applyFilter(), colorTransform(), copyChannel(), copyPixels(), draw(), drawWithQuality(), encode(), fillRect(), generateFilterRect(), getColorBoundsRect(), getPixels(), merge(), paletteMap(), pixelDissolve(), setPixels() e threshold()

Usada como o tipo para alguns parâmetros a fim de definir uma região do objeto BitmapData.

DisplayObject

getBounds(), getRect(), scrollRect, scale9Grid

Usada como o tipo de dados para a propriedade ou o tipo de dados retornado.

PrintJob

addPage()

Usada para definir o parâmetro printArea .

Sprite

startDrag()

Usada para definir o parâmetro bounds .

TextField

getCharBoundaries()

Usada como um tipo de valor de retorno.

Transform

pixelBounds

Usada como o tipo de dados.