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