Uso degli oggetti Rectangle

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Un oggetto Rectangle definisce un'area rettangolare. Gli oggetti Rectangle hanno una posizione, definita dalle coordinate x e y dell'angolo superiore sinistro, e sono dotati delle proprietà width e height . Per definire le proprietà di un nuovo oggetto Rectangle, chiamate la funzione di costruzione Rectangle() , come illustrato di seguito:

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

Ridimensionamento e riposizionamento degli oggetti Rectangle

Gli oggetti Rectangle possono essere ridimensionati e riposizionati in vari modi.

Per riposizionare direttamente un oggetto Rectangle, potete modificarne le proprietà x e y. Questa modifica non influisce sui valori di altezza e larghezza dell'oggetto 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)

Come mostrato nel codice seguente, quando modificate la proprietà left o top di un oggetto Rectangle, il rettangolo viene riposizionato. Le proprietà x e y del rettangolo corrispondono, rispettivamente, alle proprietà left e top . Tuttavia, poiché la posizione dell'angolo inferiore sinistro dell'oggetto Rectangle non cambia, il rettangolo viene ridimensionato.

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)

Analogamente, come dimostra l'esempio che segue, se modificate la proprietà bottom o right di un oggetto Rectangle, la posizione del suo angolo superiore sinistro non cambia e, di conseguenza, il rettangolo viene ridimensionato:

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)

In alternativa, si può riposizionare un oggetto Rectangle usando il metodo offset() , come illustrato di seguito:

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)

Il metodo offsetPt() opera in modo simile, con la differenza che accetta come parametro un oggetto Point e non i valori di spostamento x e y .

Un oggetto Rectangle può essere ridimensionato anche usando il metodo inflate() che include due parametri: dx e dy . Il parametro dx rappresenta il numero di pixel rispetto al centro di cui si sposteranno i lati sinistro e destro del rettangolo. Il parametro dy rappresenta il numero di pixel rispetto al centro di cui si sposteranno i lati superiore e inferiore dell'oggetto:

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)

Il metodo inflatePt() opera in modo simile, con la differenza che accetta come parametro un oggetto Point e non i valori dx e dy .

Ricerca di unioni e intersezioni di oggetti Rectangle

Usate il metodo union() per individuare la zona del rettangolo formata dai perimetri di due rettangoli:

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)

Usate il metodo intersection() per individuare la zona del rettangolo formata dall'area di sovrapposizione di due rettangoli:

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)

Usate il metodo intersects() per scoprire se due rettangoli si intersecano. Inoltre, il metodo intersects() consente di scoprire se un oggetto di visualizzazione si trova in una determinata area dello Stage. Nel codice seguente, ad esempio, si presume che lo spazio di coordinate del contenitore di oggetti di visualizzazione che contiene l'oggetto circle sia lo stesso di quello dello Stage. L'esempio illustra come usare il metodo intersects() per determinare se un oggetto di visualizzazione, circle , si interseca con aree particolari dello Stage, definite dagli oggetti 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

Analogamente, potete usare il metodo intersects() per scoprire se i perimetri dei rettangoli degli oggetti di visualizzazione si sovrappongono. Utilizzate il metodo getRect() della classe DisplayObject per includere lo spazio aggiuntivo che i tratti di un oggetto di visualizzazione potrebbero aggiungere a un'area di contorno.

Altri impieghi degli oggetti Rectangle

Gli oggetti Rectangle sono usati nei seguenti metodi e proprietà:

Classe

Metodi o proprietà

Descrizione

BitmapData

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

Usato come tipo di alcuni parametri per la definizione di un'area dell'oggetto BitmapData.

DisplayObject

getBounds(), getRect(), scrollRect, scale9Grid

Usato come tipo di dati per la proprietà o come tipo di dati restituito.

PrintJob

addPage()

Usato per la definizione del parametro printArea .

Sprite

startDrag()

Usato per la definizione del parametro bounds .

TextField

getCharBoundaries()

Usato come tipo di valore restituito.

Transform

pixelBounds

Usato come tipo di dati.