Korzystanie z obiektów RectangleFlash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje Obiekt Rectangle definiuje obszar prostokątny. Obiekt klasy Rectangle ma położenie, zdefiniowane przez współrzędne x i y jego lewego górnego rogu, oraz właściwości width i height definiujące odpowiednio szerokość i wysokość prostokąta. Wartości tych właściwości w nowym obiekcie Rectangle można zdefiniować, wywołując funkcję-konstruktor Rectangle() w następujący sposób: 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); Zmienianie rozmiaru i położenia obiektów RectangleIstnieje wiele różnych sposobów zmiany rozmiaru i położenia obiektów Rectangle. Możliwa jest bezpośrednia zmiana położenia obiektu Rectangle poprzez zmianę wartości jego właściwości x i y. Taka zmiana nie ma wpływu na szerokość ani wysokość obiektu 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) Zmiana właściwości left lub top obiektu Rectangle powoduje zmianę położenia prostokąta, co wywołuje poniższy kod. Właściwości x i y prostokąta są zgodne z właściwościami left i top. Jednak w tym przypadku nie zmienia się położenie lewego dolnego rogu obiektu Rectangle, a zatem zmianie ulegają jego wymiary. 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) I podobnie — tak jak ilustruje to poniższy przykład, zmiana wartości właściwości bottom lub right obiektu Rectangle nie powoduje zmiany położenia lewego górnego rogu. Powoduje to odpowiednią zmianę wielkości prostokąta: 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) Położenie obiektu Rectangle można również zmienić za pomocą metody offset(), tak jak przedstawiono to poniżej: 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) Metoda offsetPt() działa podobnie, z tym że jej parametrem jest obiekt klasy Point, a nie wartości przesunięć x i y. W celu zmiany rozmiaru obiektu Rectangle można natomiast użyć metody inflate(), która przyjmuje dwa parametry: dx i dy. Parametr dx reprezentuje liczbę pikseli, o jaką przesuwa się lewy i prawy bok prostokąta od środka. Parametr dy reprezentuje liczbę pikseli, o jaką przesuwa się górny i dolny bok prostokąta od środka. 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) Metoda inflatePt() działa podobnie, z tym że jej parametrem jest obiekt klasy Point, a nie wartości dx i dy. Wyznaczanie sum i części wspólnych obiektów RectangleMetoda union() służy do wyznaczania obszaru prostokątnego utworzonego przez zewnętrzne boki dwóch prostokątów: 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) Metoda intersection() służy do wyznaczania obszaru prostokątnego będącego częścią wspólną dwóch nakładających się prostokątów: 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) Metoda intersects() służy do sprawdzania, czy dwa prostokąty mają część wspólną Metody intersects() można również użyć do sprawdzenia, czy dany obiekt wyświetlany znajduje się w określonym obszarze stołu montażowego. Przykład: rozpatrzmy poniższy kod, przyjmując że przestrzeń współrzędnych obiektu wyświetlania będącego kontenerem zawierającym obiekt circle jest identyczna z przestrzenią obiektu Stage. Przykład ilustruje sposób użycia metody intersects() do sprawdzenia, czy obiekt wyświetlany circle ma wspólną część z określonymi obszarami stołu montażowego, zdefiniowanymi przez obiekty Rectangle o nazwach target1 i 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 W podobny sposób metody intersects() można użyć do sprawdzenia, czy prostokąty otaczające dwóch obiektów wyświetlanych mają część wspólną. Metoda getRect() klasy DisplayObject umożliwia uwzględnienie ewentualnych dodatkowych obszarów, o które obszar otaczający obiekt wyświetlany został powiększony przez jego obrysy. Inne zastosowania obiektów RectangleObiekty Rectangle są używane w następujących metodach i właściwościach:
|
|