Использование объектов Rectangle

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Объект Rectangle используется для определения прямоугольных областей. Положение объекта Rectangle определяется координатами его верхнего левого угла x и y , а также свойствами ширины width и высоты height . Чтобы задать эти свойства для нового объекта Rectangle, необходимо вызвать функцию конструктора Rectangle() следующим образом:

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

Изменение размеров и положения объектов Rectangle

Существует несколько способов для изменения размеров и положения объектов Rectangle.

Можно непосредственно изменить положение объекта Rectangle, изменив его свойства x и y . Это изменение не окажет никакого влияния на ширину и высоту объекта 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)

Как демонстрирует следующий пример, при изменении свойства left или top объекта Rectangle изменяется местоположение прямоугольника. Свойства x и y прямоугольника соответствуют свойствам left и top соответственно. Тем не менее, положение нижнего левого угла объекта 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.left = 20;  
rect1.top = 30; 
trace(rect1); // (x=20, y=30, w=80, h=20)

Аналогичным образом, как показано в следующем примере, при изменении свойства bottom и right объекта 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.right = 60; 
trect1.bottom = 20;  
trace(rect1); // (x=0, y=0, w=60, h=20)

Изменить положение объекта Rectangle можно также с помощью метода offset() , как показано ниже:

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)

Метод offsetPt() работает аналогичным образом, за исключением того, что в нем в качестве параметра используется объект Point вместо значений смещения x и y .

Изменить положение объекта Rectangle можно также с помощью метода inflate() , в котором используются два параметра, dx и dy . Параметр dx обозначает число пикселов, на которое правая и левая стороны прямоугольника перемещаются относительно центра. Параметр dy обозначает число пикселов, на которое верхняя и нижняя стороны прямоугольника перемещаются относительно центра.

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)

Метод inflatePt() работает аналогичным образом, за исключением того, что в нем в качестве параметра используется объект Point вместо значений смещения dx и dy .

Нахождение объединений и пересечений объектов Rectangle

Для нахождения прямоугольной области, сформированной границами двух прямоугольников, используется функция объединения union() :

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)

Для нахождения прямоугольной области, сформированной перекрытием двух прямоугольников, используется функция пересечения intersection() :

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)

Метод intersects() используется для определения факта пересечения двух прямоугольников. Метод intersects() используется также для определения факта нахождения определенного экранного объекта на заданном участке рабочей области. Например, в следующем коде предполагается, что координатное пространство контейнера, содержащего экранный объект circle , совпадает с пространством рабочей области. Пример показывает, как использовать метод intersects() для определения факта пересечения экранным объектом circle определенных участков рабочей области, заданных объектами Rectangle target1 и 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

Аналогичным образом можно использовать метод intersects() для определения факта перекрытия смежных прямоугольников двух экранных объектов. Используйте метод getRect() класса DisplayObject для включения дополнительного пространства, которое обводки экранного объекта могут добавлять к граничной области.

Другое использование объектов Rectangle

Объекты Rectangle можно использовать со следующими функциями и свойствами:

Класс

Методы или свойства

Описание

BitmapData

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

Используется как тип для некоторых параметров, определяющих область объекта BitmapData.

DisplayObject

getBounds(), getRect(), scrollRect, scale9Grid

Используется как тип данных для свойства или как возвращенный тип данных.

PrintJob

addPage()

Используется для определения параметра printArea .

Sprite

startDrag()

Используется для определения параметра bounds .

TextField

getCharBoundaries()

Используется как тип возвращенного значения.

Transform

pixelBounds

Используется как тип данных.