Rectangle 객체 사용

Flash Player 9 이상, Adobe AIR 1.0 이상

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 객체의 크기와 위치를 조정할 수 있습니다.

x y 속성을 변경하면 Rectangle 객체의 위치를 직접 조정할 수 있습니다. 이때 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)

다음 코드에서와 같이 Rectangle 객체의 left 또는 top 속성을 변경하면 사각형의 위치가 다시 지정됩니다. 사각형의 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)

또한 다음 예제와 같이 Rectangle 객체의 bottom 또는 right 속성을 변경하면 왼쪽 위 모서리 위치가 변경되지 않습니다. 대신 사각형 크기만 조정됩니다.

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)

다음과 같이 offset() 메서드를 사용하여 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.offset(20, 30);  
trace(rect1); // (x=20, y=30, w=100, h=50)

offsetPt() 메서드도 비슷한 방식으로 작동하지만 x y 오프셋 값 대신 Point 객체를 매개 변수로 사용한다는 차이가 있습니다.

dx dy 라는 두 개의 매개 변수를 포함하는 inflate() 메서드를 사용하여 Rectangle 객체의 크기를 조정할 수도 있습니다. 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() 메서드도 비슷한 방식으로 작동하지만 dx dy 값 대신 Point 객체를 매개 변수로 사용한다는 차이가 있습니다.

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 target1 target2 라는 Rectangle 객체로 정의된 스테이지 특정 영역과 교차하는지 여부를 확인하는 방법을 보여 줍니다.

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() 메서드를 사용할 수 있습니다. 표시 객체의 획으로 인해 경계 영역에 추가되는 공간을 포함하도록 하려면 DisplayObject 클래스의 getRect() 메서드를 사용합니다.

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

데이터 유형으로 사용됩니다.