Adobe Flex 3 ヘルプ

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

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)

次のコードで示すように、left または top プロパティを変更すると、Rectangle オブジェクトの位置が移動し、left および top それぞれの値に対応して 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.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)

The inflatePt() メソッドも同様に機能しますが、パラメータとして dx および dy の値ではなく Point オブジェクトを指定します。

2 つの Rectangle オブジェクトから成る結合および交差の取得

2 つの長方形を合わせた境界線によって形成される長方形領域を取得するには、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)

2 つの長方形が重なり合う部分を表す長方形領域を取得するには、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)

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(), and threshold()

BitmapData オブジェクトの領域を定義するパラメータの型として使用します。

DisplayObject

getBounds(), getRect(), scrollRect, scale9Grid

プロパティのデータ型または返されるデータ型として使用します。

PrintJob

addPage()

printArea パラメータを定義するために使用します。

Sprite

startDrag()

bounds パラメータを定義するために使用します。

TextField

getCharBoundaries()

戻り値型として使用します。

Transform

pixelBounds

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

 

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