利用 Flash Player 10 引入的原生 3D 屬性 rotationY,結合 Tweener 緩動,實現點擊撲克牌翻轉 180° 切換正反面的立體互動效果,並示範文件類架構與幀標籤同步切換。
back(背面)、9(正面 9 點)。Card,類別名同 Card。back,第 2 幀置入 9,兩者皆置中心。stop(); 靜態等待控制。package {
import flash.display.*;
import flash.events.*;
import caurina.transitions.Tweener;
public class Main extends Sprite {
private var container:Sprite;
private var pane:MovieClip;
private var isBack:Boolean = true; // 初始顯示背面
private var currentPlane:MovieClip;
private var currentRotationY:Number;
public function Main() {
container = new Sprite();
container.x = stage.stageWidth/2;
container.y = stage.stageHeight/2;
addChild(container);
pane = new Card();
container.addChild(pane);
pane.stop();
pane.buttonMode = true;
pane.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(e:MouseEvent):void {
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
currentPlane = MovieClip(e.currentTarget);
if (isBack) {
Tweener.addTween(currentPlane, {rotationY: 0, time: 1});
} else {
Tweener.addTween(currentPlane, {rotationY: -180, time: 1});
}
isBack = !isBack;
}
private function onEnterFrame(e:Event):void {
currentRotationY = currentPlane.rotationY;
// 旋轉經過 -90°~10° 區間時切換幀(正面↔背面)
if (currentRotationY >= -90 && currentRotationY <= 10) {
if (isBack) {
currentPlane.gotoAndStop(2); // 顯示正面
} else {
currentPlane.gotoAndStop(1); // 顯示背面
}
stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
trace("已清除事件偵聽");
}
}
}
}
ENTER_FRAME 中監聽 rotationY 通過 -90°(側面)時切換 gotoAndStop,避免翻轉過程中露出錯誤面。time:1 秒完成旋轉,可換為 easeInOutQuad 等。Card 類別可復用擴展(如 52 張牌管理類)。啟用 z 軸位移(Tweener.addTween(currentPlane, {z:-200, time:1});)可產生「翻轉同時放大/縮小」的透視動畫效果,增強立體感。
gsap.to(card, {rotationY: 180, duration: 1, ease: "power2.inOut"});transform: rotateY(180deg) + transition 同樣原理。此教學是 Flash 原生 3D API(非 Stage3D)入門的經典案例,清晰展示 rotationY、幀同步、緩動庫整合三大核心技術。