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(), drawWithQuality(), encode(), 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.
|
|
|
|