遮蓋顯示物件

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

您可以將顯示物件當做遮色片使用以建立缺口,透過這個缺口可以看到另一個顯示物件的內容。

定義遮色片

若要指出顯示物件將成為另一個顯示物件的遮色片,請將該遮色片物件設定為要遮蓋之顯示物件的 mask 屬性:

// Make the object maskSprite be a mask for the object mySprite. 
mySprite.mask = maskSprite;

被遮蓋的顯示物件會在做為遮色片的顯示物件之所有不透明 (非透明) 的區域下呈現。例如,下列程式碼會建立 Shape 實體 (其中包含紅色 100 x 100 像素方形),以及 Sprite 實體 (其中包含半徑為 25 像素的藍色圓形)。按一下圓形時,它會設定為正方形的遮色片,使得正方形只顯示由實心圓形部分所遮蓋的地方,換句話說,將只能看見紅色圓形。

// This code assumes it's being run within a display object container 
// such as a MovieClip or Sprite instance. 
 
import flash.display.Shape; 
 
// Draw a square and add it to the display list. 
var square:Shape = new Shape(); 
square.graphics.lineStyle(1, 0x000000); 
square.graphics.beginFill(0xff0000); 
square.graphics.drawRect(0, 0, 100, 100); 
square.graphics.endFill(); 
this.addChild(square); 
 
// Draw a circle and add it to the display list. 
var circle:Sprite = new Sprite(); 
circle.graphics.lineStyle(1, 0x000000); 
circle.graphics.beginFill(0x0000ff); 
circle.graphics.drawCircle(25, 25, 25); 
circle.graphics.endFill(); 
this.addChild(circle); 
 
function maskSquare(event:MouseEvent):void 
{ 
    square.mask = circle; 
    circle.removeEventListener(MouseEvent.CLICK, maskSquare); 
} 
 
circle.addEventListener(MouseEvent.CLICK, maskSquare);

做為遮色片的顯示物件可以拖曳、製成動畫、可動態調整大小,並可在單一遮色片中使用不同的形狀。遮色片顯示物件不一定要加入顯示清單中,但是若要遮色片物件在「舞台」縮放時也跟著縮放,或是若要讓使用者與遮色片互動 (例如使用者控制拖曳及調整大小),則必須將遮色片物件加入顯示清單中。顯示清單的實際 z 索引 (由前至後順序) 沒關係,只要遮色片物件加入顯示清單即可 (遮色片物件只會在螢幕上顯示為遮色片)。若遮色片物件是有多個影格的 MovieClip 實體,就會在其時間軸上播放所有影格,若不做為遮色片,也會有相同情況。您可以將 mask 屬性設定為 null ,藉以移除遮色片:

// remove the mask from mySprite 
mySprite.mask = null;

您不能使用遮色片來遮罩另一個遮色片。您不能設定遮色片顯示物件的 alpha 屬性。用來做為遮色片的顯示物件中,只能使用填色,而會忽略筆畫。

AIR 2

若被遮色的顯示物件是透過設定 cacheAsBitmap cacheAsBitmapMatrix 屬性加以快取,則遮色片必須是被遮色的顯示物件的子系。同樣地,若被遮色的顯示物件是快取之顯示物件容器的子系,則遮色片與顯示物件都必須是該容器的子系。若被遮色的物件是一個以上的已快取顯示物件容器的子系,則遮色片必須是在顯示清單中最接近被遮色物件的已快取容器的子系。

關於遮蓋裝置字體

您可以使用顯示物件,遮蓋採用裝置字體的文字內容。使用顯示物件遮蓋裝置字體中的文字集時,會使用遮色片的矩形範圍框做為遮蓋形狀;也就是說,如果您為裝置字體文字建立了非矩形的顯示物件遮色片,則出現在 SWF 檔中的遮色片會顯示為遮色片的矩形範圍框形狀,而不是遮色片本身的形狀。

Alpha 色版遮色片

如果遮色片和受到遮色的顯示物件都使用點陣圖快取時,便會支援 Alpha 色版遮色片,如下所示:

// maskShape is a Shape instance which includes a gradient fill. 
mySprite.cacheAsBitmap = true; 
maskShape.cacheAsBitmap = true; 
mySprite.mask = maskShape;

例如,Alpha 色板遮色片的一種應用是在套用於已遮蓋顯示物件的濾鏡之外、另外在遮色片物件上使用濾鏡。

在下列範例中,會在「舞台」上載入外部影像檔,該影像 (更準確地說,是此影像所載入的目的地 Loader 實體) 將會是遭到遮蓋的顯示物件;漸層橢圓形 (純黑色中心逐漸淡出透明邊緣) 會繪製在影像之上,這將是 Alpha 遮色片。兩個顯示物件都已開啟點陣圖快取,橢圓形是設定為影像的遮色片,然後將它變成可拖曳。

// This code assumes it's being run within a display object container 
// such as a MovieClip or Sprite instance. 
 
import flash.display.GradientType; 
import flash.display.Loader; 
import flash.display.Sprite; 
import flash.geom.Matrix; 
import flash.net.URLRequest; 
 
// Load an image and add it to the display list. 
var loader:Loader = new Loader(); 
var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg"); 
loader.load(url); 
this.addChild(loader); 
 
// Create a Sprite. 
var oval:Sprite = new Sprite(); 
// Draw a gradient oval. 
var colors:Array = [0x000000, 0x000000]; 
var alphas:Array = [1, 0]; 
var ratios:Array = [0, 255]; 
var matrix:Matrix = new Matrix(); 
matrix.createGradientBox(200, 100, 0, -100, -50); 
oval.graphics.beginGradientFill(GradientType.RADIAL, 
                                colors, 
                                alphas, 
                                ratios, 
                                matrix); 
oval.graphics.drawEllipse(-100, -50, 200, 100); 
oval.graphics.endFill(); 
// add the Sprite to the display list 
this.addChild(oval); 
 
// Set cacheAsBitmap = true for both display objects. 
loader.cacheAsBitmap = true; 
oval.cacheAsBitmap = true; 
// Set the oval as the mask for the loader (and its child, the loaded image) 
loader.mask = oval; 
 
// Make the oval draggable. 
oval.startDrag(true);