Utilisation des objets Rectangle

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Un objet Rectangle définit une zone rectangulaire. Un objet Rectangle possède une position, définie par les coordonnées x et y de son angle supérieur gauche, une propriété width et une propriété height. Pour définir les propriétés d’un nouvel objet Rectangle, appelez la fonction constructeur Rectangle(), comme suit :

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);

Redimensionnement et repositionnement des objets Rectangle

Il existe de nombreuses façons de redimensionner et de repositionner des objets Rectangle.

Vous pouvez redimensionner directement l’objet Rectangle en modifiant ses propriétés x et y. Ce changement n’a aucune incidence sur la largeur ou la hauteur de l’objet 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)

Comme l’illustre le code suivant, l’objet Rectangle est repositionné lorsque vous modifiez la propriété left ou top correspondante. Les propriétés x et y de l’objet rectangle correspondent respectivement aux propriétés left et top. Néanmoins, la position de l’angle inférieur gauche de l’objet Rectangle ne change pas. Par conséquent, il est redimensionné.

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)

De même, comme indiqué dans l’exemple suivant, si vous modifiez la propriété bottom ou right d’un objet Rectangle, la position de son angle supérieur gauche ne change pas. L’objet Rectangle est redimensionné en conséquence :

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)

Vous pouvez également repositionner un objet Rectangle à l’aide de la méthode offset(), comme suit :

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)

La méthode offsetPt() fonctionne de la même façon, sauf qu’elle prend un objet Point comme paramètre, plutôt que les valeurs de décalage x et y.

Vous pouvez également redimensionner un objet Rectangle à l’aide de la méthode inflate(), qui inclut deux paramètres, dx et dy. Le paramètre dx représente le déplacement à partir du centre des côtés droit et gauche de l’objet Rectangle, exprimé en pixels. Le paramètre dy représente le déplacement à partir du centre du haut et du bas de l’objet Rectangle, exprimé en pixels.

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)

La méthode inflatePt() fonctionne de la même façon, sauf qu’elle prend un objet Point comme paramètre, plutôt que les valeurs de décalage dx et dy.

Recherche d’unions et d’intersections d’objets Rectangle

Vous utilisez la méthode union() pour rechercher la région rectangulaire formée par les limites de deux rectangles :

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)

Vous utilisez la méthode intersection() pour rechercher la région rectangulaire formée par la région commune de deux rectangles :

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)

Vous utilisez la méthode intersects() pour savoir si deux rectangles se recouvrent. Vous pouvez également utiliser la méthode intersects() pour savoir si un objet d’affichage est dans une certaine région de la scène. Dans l’exemple de code suivant, supposez que l’espace de coordonnées du conteneur d’objet d’affichage contenant l’objet circle soit identique à celui de la scène. L’exemple indique comment utiliser la méthode intersects() pour déterminer si un objet d’affichage, circle, recoupe des régions spécifiées de la scène, définies par les objets Rectangle target1 et target2 :

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

De même, vous pouvez utiliser la méthode intersects() pour savoir si les cadres de délimitation de deux objets d’affichage se chevauchent. Utilisez la méthode getRect() de la classe DisplayObject pour inclure un espace supplémentaire que les traits d’un objet d’affichage ajoutent à une région de sélection.

Autres utilisations des objets Rectangle

Les objets Rectangle sont utilisés dans les propriétés et méthodes suivantes :

Classe

Méthodes ou propriétés

Description

BitmapData

applyFilter(), colorTransform(), copyChannel(), copyPixels(), draw(), drawWithQuality(), encode(), fillRect(), generateFilterRect(), getColorBoundsRect(), getPixels(), merge(), paletteMap(), pixelDissolve(), setPixels() et threshold()

Utilisée comme type de certains paramètres pour définir une région de l’objet BitmapData.

DisplayObject

getBounds(), getRect(), scrollRect, scale9Grid

Utilisée comme type de données pour la propriété ou le type de données renvoyé.

PrintJob

addPage()

Utilisée pour définir le paramètre printArea.

Sprite

startDrag()

Utilisée pour définir le paramètre bounds.

TextField

getCharBoundaries()

Utilisée comme type de valeur renvoyé.

Transform

pixelBounds

Utilisée comme type de données.