Rectangle オブジェクトの使用

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 オブジェクトのその他の使用

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 プロパティをそれぞれ lefttop プロパティに一致させて再配置されます。ただし、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=30, y=20, w=70, h=30)

同様に、次の例で示すように、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() メソッドを使用して、表示オブジェクト circletarget1 および 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()、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

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


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000187.html