Obiekt
Rectangle
definiuje obszar prostokątny. Obiekt klasy Rectangle ma położenie, zdefiniowane przez współrzędne
x
i
y
jego lewego górnego rogu, oraz właściwości
width
i
height
definiujące odpowiednio szerokość i wysokość prostokąta. Wartości tych właściwości w nowym obiekcie Rectangle można zdefiniować, wywołując funkcję-konstruktor
Rectangle()
w następujący sposób:
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);
Zmienianie rozmiaru i położenia obiektów Rectangle
Istnieje wiele różnych sposobów zmiany rozmiaru i położenia obiektów Rectangle.
Możliwa jest bezpośrednia zmiana położenia obiektu Rectangle poprzez zmianę wartości jego właściwości
x
i
y
. Taka zmiana nie ma wpływu na szerokość ani wysokość obiektu 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)
Zmiana właściwości
left
lub
top
obiektu Rectangle powoduje zmianę położenia prostokąta, co wywołuje poniższy kod. Właściwości
x
i
y
prostokąta są zgodne z właściwościami
left
i
top
. Jednak w tym przypadku nie zmienia się położenie lewego dolnego rogu obiektu Rectangle, a zatem zmianie ulegają jego wymiary.
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)
I podobnie — tak jak ilustruje to poniższy przykład, zmiana wartości właściwości
bottom
lub
right
obiektu Rectangle nie powoduje zmiany położenia lewego górnego rogu. Powoduje to odpowiednią zmianę wielkości prostokąta:
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)
Położenie obiektu Rectangle można również zmienić za pomocą metody
offset()
, tak jak przedstawiono to poniżej:
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)
Metoda
offsetPt()
działa podobnie, z tym że jej parametrem jest obiekt klasy Point, a nie wartości przesunięć
x
i
y
.
W celu zmiany rozmiaru obiektu Rectangle można natomiast użyć metody
inflate()
, która przyjmuje dwa parametry:
dx
i
dy
. Parametr
dx
reprezentuje liczbę pikseli, o jaką przesuwa się lewy i prawy bok prostokąta od środka. Parametr
dy
reprezentuje liczbę pikseli, o jaką przesuwa się górny i dolny bok prostokąta od środka.
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)
Metoda
inflatePt()
działa podobnie, z tym że jej parametrem jest obiekt klasy Point, a nie wartości
dx
i
dy
.
Wyznaczanie sum i części wspólnych obiektów Rectangle
Metoda
union()
służy do wyznaczania obszaru prostokątnego utworzonego przez zewnętrzne boki dwóch prostokątów:
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)
Metoda
intersection()
służy do wyznaczania obszaru prostokątnego będącego częścią wspólną dwóch nakładających się prostokątów:
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)
Metoda
intersects()
służy do sprawdzania, czy dwa prostokąty mają część wspólną Metody
intersects()
można również użyć do sprawdzenia, czy dany obiekt wyświetlany znajduje się w określonym obszarze stołu montażowego. Przykład: rozpatrzmy poniższy kod, przyjmując że przestrzeń współrzędnych obiektu wyświetlania będącego kontenerem zawierającym obiekt
circle
jest identyczna z przestrzenią obiektu Stage. Przykład ilustruje sposób użycia metody
intersects()
do sprawdzenia, czy obiekt wyświetlany
circle
ma wspólną część z określonymi obszarami stołu montażowego, zdefiniowanymi przez obiekty Rectangle o nazwach
target1
i
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
W podobny sposób metody
intersects()
można użyć do sprawdzenia, czy prostokąty otaczające dwóch obiektów wyświetlanych mają część wspólną. Metoda
getRect()
klasy DisplayObject umożliwia uwzględnienie ewentualnych dodatkowych obszarów, o które obszar otaczający obiekt wyświetlany został powiększony przez jego obrysy.
Inne zastosowania obiektów Rectangle
Obiekty Rectangle są używane w następujących metodach i właściwościach:
Klasa
|
Metody lub właściwości
|
Opis
|
BitmapData
|
applyFilter(), colorTransform(), copyChannel(), copyPixels(), draw(), drawWithQuality(), encode(), fillRect(), generateFilterRect(), getColorBoundsRect(), getPixels(), merge(), paletteMap(), pixelDissolve(), setPixels() i threshold()
|
Używane jako typ niektórych parametrów definiujących obszar obiektu BitmapData.
|
DisplayObject
|
getBounds(), getRect(), scrollRect, scale9Grid
|
Używane jako typ danych właściwości lub zwracanych wartości.
|
PrintJob
|
addPage()
|
Używane do definiowania parametru
printArea
.
|
Sprite
|
startDrag()
|
Używane do definiowania parametru
bounds
.
|
TextField
|
getCharBoundaries()
|
Używane jako typ zwracanej wartości.
|
Transform
|
pixelBounds
|
Używane jako typ danych.
|
|
|
|