サイズの変更とオブジェクトの拡大/縮小

Flash Player 9 以降、Adobe AIR 1.0 以降

表示オブジェクトのサイズを測定および操作する方法は 2 つあります。サイズのプロパティ(width および height)または拡大/縮小のプロパティ(scaleX および scaleY)のいずれかを使用します。

各表示オブジェクトには、width プロパティと height プロパティがあり、これらの値はオブジェクトのサイズに初期設定されています(ピクセル単位)。これらのプロパティの値を読み取って、表示オブジェクトのサイズを測定できます。 また、次のように新しい値を指定して、オブジェクトのサイズを変更することもできます。

// Resize a display object. 
square.width = 420; 
square.height = 420; 
 
// Determine the radius of a circle display object. 
var radius:Number = circle.width / 2;

表示オブジェクトの height または width を変更すると、オブジェクトが拡大または縮小されます。つまり、オブジェクトのコンテンツが新しい領域に合わせて拡張または縮小することになります。ベクターシェイプのみを含む表示オブジェクトの場合、これらのシェイプは新しいスケールで再描画されます。その際、画質が低下することはありません。 表示オブジェクト内のすべてのビットマップグラフィックエレメントは、再描画されるのではなく、拡大/縮小されます。 このため、イメージの実際のピクセル情報よりも大きな幅と高さが設定されたデジタル写真などの場合、ピクセル化されて粗く表示されます。

表示オブジェクトの width または height プロパティを変更すると、オブジェクトの scaleX プロパティと scaleY プロパティも Flash Player および AIR によって更新されます。

注意: TextField オブジェクトはこの拡大/縮小動作での例外です。テキストフィールドでは、テキストの折り返しとフォントサイズに合わせてテキストフィールド自体のサイズが変化する必要があります。そのため、サイズ変更後に scaleX 値または scaleY 値が 1 に戻ります。ただし、TextField オブジェクトの scaleX 値または scaleY 値を手動で調整した場合は、指定した拡大/縮小値に合わせて幅と高さの値が変化します。

これらのプロパティは、表示オブジェクトのサイズを、その元のサイズと比較して相対的に表します。 scaleX プロパティと scaleY プロパティは、小数(十進分数)値を使用してパーセンテージを表します。例えば、表示オブジェクトの width を変更して、その幅を元のサイズの半分にした場合、このオブジェクトの scaleX プロパティの値は 50% を表す .5 となります。 このオブジェクトの高さを 2 倍にした場合、その scaleY プロパティの値は、200% を表す 2 となります。

// circle is a display object whose width and height are 150 pixels. 
// At original size, scaleX and scaleY are 1 (100%). 
trace(circle.scaleX); // output: 1 
trace(circle.scaleY); // output: 1 
 
// When you change the width and height properties,  
// Flash Player changes the scaleX and scaleY properties accordingly. 
circle.width = 100; 
circle.height = 75; 
trace(circle.scaleX); // output: 0.6622516556291391 
trace(circle.scaleY); // output: 0.4966887417218543

サイズの変更は相対的ではありません。 つまり、四角形の height は変更するが width は変更しない場合、その比率は同じではなくなるため、オブジェクトは四角形ではなく矩形になります。表示オブジェクトのサイズを相対的に変更したい場合、width プロパティまたは height プロパティを設定する代わりに、scaleX プロパティと scaleY プロパティの値を設定することによって、表示オブジェクトのサイズを変更できます。例えば次のコードは、square という名前の表示オブジェクトの width を変更し、次に垂直スケール(scaleY)を変更して水平スケールに一致させることで、このオブジェクトの相対的なサイズを保ちます。

// Change the width directly. 
square.width = 150; 
 
// Change the vertical scale to match the horizontal scale,  
// to keep the size proportional. 
square.scaleY = square.scaleX;