Uso de objetos Rectangle

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Un objeto Rectangle define un área rectangular. Tiene una posición, definida por las coordenadas x e y de su esquina superior izquierda, una propiedad width y una propiedad height . Estas propiedades se pueden definir para un objeto Rectangle invocando a la función constructora Rectangle() , del siguiente modo:

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

Cambio de tamaño y posición de objetos Rectangle

Existen varias formas de cambiar el tamaño y la posición de los objetos Rectangle.

Se puede cambiar la posición del objeto Rectangle directamente modificando sus propiedades x e y . Esta cambio no tiene ningún efecto sobre la anchura o la altura del 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)

Tal y como se muestra en el siguiente código, cuando se cambia la propiedad left o top de un objeto Rectangle, el rectángulo cambia de posición. Las propiedades x e y del rectángulo coinciden con las propiedades left y top , respectivamente. Sin embargo, no se modifica la posición de la esquina inferior izquierda del objeto Rectangle y cambia su tamaño.

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)

Asimismo, tal como se muestra en el ejemplo siguiente, si se cambia la propiedad bottom o right del objeto Rectangle, no se verá modificada la posición de su esquina superior izquierda. El rectángulo cambia de tamaño de forma correspondiente:

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)

También se puede cambiar la posición de un objeto Rectangle con el método offset() , del siguiente modo:

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)

El método offsetPt() funciona de un modo similar, con la excepción de que utiliza un objeto Point como parámetro, en lugar de valores de desplazamiento x e y .

También se puede cambiar el tamaño de un objeto Rectangle con el método inflate() , que incluye dos parámetros, dx y dy . El parámetro dx representa el número de píxeles que los lados izquierdo y derecho del rectángulo se desplazan respecto al centro. El parámetro dy representa el número de píxeles que la parte superior e inferior del rectángulo se desplazan respecto al 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)

El método inflatePt() funciona de un modo similar, con la excepción de que utiliza un objeto Point como parámetro, en lugar de valores dx y dy .

Búsqueda de uniones e intersecciones de objetos Rectangle

El método union() se usa para buscar la región rectangular formada por los límites de dos rectá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)

El método intersection() se usa para buscar la región rectangular formada por el área solapada de dos rectá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)

El método intersects() se usa para saber si dos rectángulos presentan un punto de intersección. Asimismo, se puede usar el método intersects() para conocer si en una región determinada del escenario hay un objeto de visualización. Por ejemplo, en el código siguiente, se considera que el espacio de coordenadas del contenedor de objetos de visualización que incluye el objeto circle es el mismo que el del escenario. En el ejemplo se muestra cómo utilizar el método intersects() para determinar si un objeto de visualización, circle , crea una intersección con regiones especificadas del escenario, definidas por los objetos Rectangle target1 y 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

Asimismo, se puede utilizar el método intersects() para saber si se superponen los rectángulos de delimitación de dos objetos de visualización. Se puede utilizar el método getRect() de la clase DisplayObject para incluir el espacio adicional que puedan añadir los trazos de un objeto de visualización a la región de delimitación.

Utilización alternativa de objetos Rectangle

Los objetos Rectangle se utilizan en los métodos y las propiedades siguientes:

Clase

Métodos o propiedades

Descripción

BitmapData

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

Se usa como el tipo de algunos parámetros para definir una región del objeto BitmapData.

DisplayObject

getBounds(), getRect(), scrollRect, scale9Grid

Se usa como el tipo de datos de la propiedad o el tipo de datos que se devuelve.

PrintJob

addPage()

Se usa para definir el parámetro printArea .

Sprite

startDrag()

Se usa para definir el parámetro bounds .

TextField

getCharBoundaries()

Se usa como el tipo de valor devuelto.

Transform

pixelBounds

Se usa como el tipo de datos.