Använda Rectangle-objekt

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Med Rectangle definierar du ett rektangulärt område. Ett Rectangle-objekt har en plats som definieras av x- och y-koordinaterna för dess övre vänstra hörn och egenskaper för width och height. Du kan definiera dessa egenskaper för ett nytt Rectangle-objekt genom att anropa konstruktorn Rectangle() enligt följande:

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

Ändra storlek på och flytta Rectangle-objekt

Det finns olika sätt att välja mellan när du vill flytta och ändra storlek på Rectangle-objekt.

Du kan flytta Rectangle-objektet direkt genom att ändra dess x- och y-egenskaper. Den här ändringen har ingen effekt på Rectangle-objektets bredd eller höjd.

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)

När du ändrar egenskapen left eller top för ett Rectangle-objekt omplaceras rektangeln, vilket följande kod visar. Rektangelns x- och y-egenskaper matchar egenskaperna left respektive top. Platsen för Rectangle-objektets nedre vänstra hörn ändras däremot inte, utan i stället ändras storleken.

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)

På samma sätt ändras inte platsen för det övre vänstra hörnet om du ändrar egenskapen bottom eller right för ett Rectangle-objekt, som nästa exempel visar. Rektangelns storlek ändras:

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)

Du kan också flytta ett Rectangle-objekt med hjälp av metoden offset(). Gör så här:

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)

Metoden offsetPt() fungerar ungefär på samma sätt, förutom att den tar ett Point-objekt som sin parameter, i stället för förskjutningsvärdena x och y.

Med metoden inflate() kan du också ändra storleken på ett Rectangle-objekt. Metoden innehåller två parametrar, dx och dy. Parametern dx representerar det antal pixlar som rektangelns vänstra och högra sidor flyttas från centrum. Parametern dy representerar det antal pixlar som rektangelns övre och nedre sidor flyttas från centrum:

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)

Metoden inflatePt() fungerar ungefär på samma sätt, förutom att den tar ett Point-objekt som sin parameter, i stället för värdena dx och dy.

Hitta föreningar och överlappande områden i Rectangle-objekt

Du använder metoden union() för att hitta det rektangulära området som bildas av de båda rektanglarnas gränser:

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)

Du använder metoden intersection() för att hitta det rektangulära området som bildas av de båda rektanglarnas överlappande områden:

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)

Om du vill ta reda på om två rektanglar överlappar varandra använder du metoden intersects(). Du kan också använda metoden intersects() för att ta reda på om ett visningsobjekt finns i ett visst område på scenen. I följande kodexempel antas att koordinatmodellen för visningsobjektsbehållaren med objektet circle är densamma som för scenen. I exemplet visas hur du använder metoden intersects() för att bestämma om ett visningsobjekt, circle, överlappar angivna områden på scenen så som de definieras av Rectangle-objekten target1 och 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

På liknade sätt kan du använda metoden intersects() för att ta reda på om markeringsramen för de båda visningsobjekten överlappar varandra. Med metoden getRect() för DisplayObject-klassen inkluderar du eventuellt utrymme som linjerna för ett visningsobjekt kan lägga till i ett gränsområde.

Andra användningsområden för Rectangle-objekt

Rectangle-objekt används i följande metoder och egenskaper:

Klass

Metoder eller egenskaper

Beskrivning

BitmapData

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

Används som typ för vissa parametrar för att definiera ett område av BitmapData-objektet.

DisplayObject

getBounds(), getRect(), scrollRect, scale9Grid

Används som datatyp för egenskapen eller den returnerade datatypen.

PrintJob

addPage()

Används för att definiera parametern printArea.

Sprite

startDrag()

Används för att definiera parametern bounds.

TextField

getCharBoundaries()

Används som returnerad värdetyp.

Transform

pixelBounds

Används som datatyp.