Korzystanie z obiektów Rectangle

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

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(), 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.