結合遮罩高光按鈕製作、Tweener 緩動庫、三角函數圓周佈局、深度排序,打造點擊選單項目放大置中、其餘項目圓周分佈旋轉的立體選單互動。
button:button 設 連結類別 Button,基類 Sprite。import caurina.transitions.Tweener;
import flash.events.MouseEvent;
import flash.display.Sprite;
var container:Sprite = new Sprite();
container.x = stage.stageWidth/2;
container.y = stage.stageHeight/2;
addChild(container);
const NUM:uint = 12;
const R:Number = 100;
var angle:Number = 0;
var clickedX:Number = 0, clickedY:Number = 0;
for (var i:uint = 0; i <= NUM; i++) {
var btn:Sprite = new Button();
btn.buttonMode = true;
btn.name = "mc" + i;
btn.addEventListener(MouseEvent.CLICK, onClick);
container.addChild(btn);
if (i == NUM) { // 中心放大按鈕
btn.x = clickedX; btn.y = clickedY;
btn.mouseEnabled = false;
Tweener.addTween(btn, {scaleX:2, scaleY:2, time:1, transition:"easeInOutQuint"});
} else { // 圓周分佈
angle += 30; // 360/12
var rad:Number = angle * Math.PI/180;
btn.x = Math.cos(rad) * R;
btn.y = Math.sin(rad) * R;
}
}
// 點擊處理:將目標按鈕移至中心放大,原中心按鈕回到圓周
function onClick(e:MouseEvent):void {
var target:Sprite = e.currentTarget as Sprite;
// 1. 原中心按鈕(mouseEnabled=false 者)動回圓周
// 2. 目標按鈕動至中心放大
// 3. 更新 clickedX/Y、mouseEnabled、角度重排
// (完整邏輯需配合 Tweener 序列動畫,此處略)
}
x = R·cos(θ), y = R·sin(θ),θ 遞增 30°(12 項)。transition:"easeInOutQuint" 產生自然加減速。sortZ() 或 setChildIndex 確保中心放大按鈕在最上層。container 置中舞台,所有按鈕座標相對 container 原點。原教學使用 caurina.transitions.Tweener(約 2008-2010 年流行)。現代專案建議:
gsap.to(btn, {scale:2, duration:1, ease:"power3.inOut"});此範例展示了「程式化佈局 + 緩動動畫 + 互動狀態機」的 AS3 進階 UI 開發模式,是從時間軸動畫邁向代碼驅動介面的關鍵橋樑。