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.
|
|
|
|