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 オブジェクトをサイズ変更および移動するには多数の方法があります。

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)

次のように、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() メソッドも同様に機能しますが、パラメーターとして x および y のオフセット値ではなく Point オブジェクトを指定します。

Rectangle オブジェクトの inflate() メソッドに dx および dy の 2 つのパラメーターを指定してサイズを変更することもできます。 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() メソッドは、2 つの矩形の境界で形成された矩形領域の検索に使用します。

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() メソッドは、2 つの矩形の重なり合う領域で形成される矩形領域の検索に使用します。

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)

2 つの長方形に重なり合う部分があるかどうかを調べるには、 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

同様に、2 つの表示オブジェクトの境界を示す矩形に重なり合う部分があるかどうかを調べる場合にも 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

データ型として使用します。