矩陣遮罩是指將遮罩層劃分為多個小區塊(矩陣狀),每個區塊獨立控制顯示/隱藏或動畫時序,產生類似數位雨、像素化轉場、馬賽克揭露等效果。這是進階遮罩技術的經典應用。
package {
import flash.display.*;
import flash.events.*;
import flash.geom.Rectangle;
public class MatrixMask extends Sprite {
private var content:MovieClip; // 被遮罩內容
private var maskContainer:Sprite; // 遮罩矩陣容器
private var cols:int = 20; // 列數
private var rows:int = 15; // 行數
private var cellW:Number;
private var cellH:Number;
private var cells:Array = []; // 遮罩格子陣列
private var revealOrder:Array; // 揭露順序索引
public function MatrixMask(target:MovieClip) {
content = target;
addChild(content);
maskContainer = new Sprite();
addChild(maskContainer);
content.mask = maskContainer; // 設定遮罩關係
initCells();
shuffleRevealOrder();
startReveal();
}
private function initCells():void {
cellW = content.width / cols;
cellH = content.height / rows;
for (var r:int = 0; r < rows; r++) {
for (var c:int = 0; c < cols; c++) {
var cell:Sprite = new Sprite();
cell.graphics.beginFill(0xFFFFFF);
cell.graphics.drawRect(c * cellW, r * cellH, cellW, cellH);
cell.graphics.endFill();
cell.alpha = 0; // 初始全透明(隱藏內容)
maskContainer.addChild(cell);
cells.push({sprite: cell, row: r, col: c});
}
}
}
private function shuffleRevealOrder():void {
revealOrder = [];
for (var i:int = 0; i < cells.length; i++) revealOrder.push(i);
// 費雪耶茨洗牌
for (i = revealOrder.length - 1; i > 0; i--) {
var j:int = Math.random() * (i + 1);
var tmp:int = revealOrder[i];
revealOrder[i] = revealOrder[j];
revealOrder[j] = tmp;
}
}
private function startReveal():void {
var index:int = 0;
var timer:Timer = new Timer(30); // 每 30ms 揭露一格
timer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void {
if (index >= revealOrder.length) {
timer.stop();
return;
}
var cellInfo:Object = cells[revealOrder[index]];
// 彈性動畫讓格子從 0→1
animateCell(cellInfo.sprite);
index++;
});
timer.start();
}
private function animateCell(cell:Sprite):void {
// 簡單緩動:每幀 alpha += 0.1
cell.addEventListener(Event.ENTER_FRAME, function(e:Event):void {
cell.alpha += 0.1;
if (cell.alpha >= 1) {
cell.alpha = 1;
cell.removeEventListener(Event.ENTER_FRAME, arguments.callee);
}
});
}
}
}
// 主場景或文件類別
var myContent:MovieClip = new MyContentMC(); // 你的圖片/動畫/文字內容
addChild(myContent);
var matrixMask:MatrixMask = new MatrixMask(myContent);
matrixMask.x = 100;
matrixMask.y = 50;
| 效果類型 | 實現關鍵 |
|---|---|
| 數位雨/矩陣碼 | 格子顯示隨機字符、綠色螢光色、不同下落速度 |
| 像素化轉場 | 格子按行/列/螺旋順序放大/旋轉/翻轉揭露 |
| 馬賽克拼圖 | 格子初始亂序位置、動畫歸位拼成完整圖 |
| 掃光掃描 | 按掃描線順序(左→右、上→下)快速揭露 |
| 圓形擴散波 | 從中心點計算距離、按距離排序揭露 |
| 文字逐字顯示 | 每格對應一字、配合打字機音效 |