萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 軟體知識 >  >> 影像處理 >> Flash 教學

Flash 滑鼠跟隨文字特效:duplicateMovieClip 打造拖尾殘影效果

效果預覽

滑鼠移動時,文字像彗星般拖著漸變縮小、淡出的殘影軌跡,極具動態美感。核心技術:duplicateMovieClip 大量複製實例 + enterFrame 逐幀更新座標。

完整製作步驟

1. 準備文字元件

  1. 新建 Flash 文件
  2. 舞台輸入文字,設定顏色、字體
  3. Ctrl+B 兩次 → 文字拆散為向量形狀(避免字體遺失)
  4. 選取工具右鍵文字 → 「轉換為元件」→ 類型「影片剪輯」→ 命名「文字MC」
  5. 屬性面板實例名設為:mc
  6. 從資源庫拖一個實例到舞台**可見區域外**(備用原型)

2. 建立控制程式碼圖層

  • 新增圖層「AS」
  • 第 1 幀按 F9 貼上程式碼

3. 核心程式碼(AS2)

_root.onLoad = function() {
    // 初始化:複製 20 個殘影實例
    for (var i = 1; i <= 20; i++) {
        _root.mc.duplicateMovieClip("mc" + i, i);
        _root["mc" + i]._xscale = 100 - 10 * i;   // 逐級縮小
        _root["mc" + i]._yscale = 100 - 10 * i;
        _root["mc" + i]._alpha = 100 - 5 * i;     // 逐級透明
    }
};

_root.onEnterFrame = function() {
    for (var i = 1; i <= 20; i++) {
        if (i == 1) {
            // 第 1 個跟隨滑鼠
            startDrag(_root["mc" + i], true);      // true = 鎖定中心點
            _root.mc._alpha = 0;                   // 隱藏原型
        } else {
            // 其餘跟隨前一個,帶緩動效果
            var dx = _root["mc" + (i-1)]._x - _root["mc" + i]._x;
            var dy = _root["mc" + (i-1)]._y - _root["mc" + i]._y;
            _root["mc" + i]._x += dx / 4 + dx * 0.08;
            _root["mc" + i]._y += dy / 4 + dy * 0.08;
        }
    }
};

程式碼邏輯深度解析

初始化階段

  • 複製 20 個實例 mc1~mc20,層級 1~20
  • 遞減縮放:mc1 100% → mc20 -100%(負值會翻轉,實際可見度為 0)
  • 遞減透明:mc1 100% → mc20 0%
  • 形成「由實到虛、由大到小」的殘影隊列

每幀更新階段

  • mc1:startDrag(..., true) 鎖定中心點跟隨滑鼠
  • mc2~mc20:各自向前一個實例靠近
    • dx/4:基礎跟隨速度(25% 距離/幀)
    • dx*0.08:額外彈性項(8% 距離/幀),疊加形成緩動
    • 合成係數 0.33,自然緩入感

參數調整指南

AS3 版本重寫(現代專案推薦)

package {
    import flash.display.*;
    import flash.events.*;
    import flash.geom.Point;

    public class MouseTrail extends Sprite {
        private var trail:Array = [];
        private var trailLength:int = 20;
        private var prototype:MovieClip;

        public function MouseTrail() {
            // 建立原型文字(或從資源庫實例化)
            prototype = new TextMC();  // 假設庫中有 TextMC 類別
            prototype.visible = false;
            addChild(prototype);

            // 初始化殘影陣列
            for (var i:int = 0; i < trailLength; i++) {
                var mc:MovieClip = new TextMC();
                mc.scaleX = mc.scaleY = 1 - i * 0.05;
                mc.alpha = 1 - i * 0.05;
                trail.push(mc);
                addChild(mc);
            }

            stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        }

        private var mousePos:Point = new Point();

        private function onMouseMove(e:MouseEvent):void {
            mousePos.x = e.stageX;
            mousePos.y = e.stageY;
        }

        private function onEnterFrame(e:Event):void {
            // 第一個跟隨滑鼠
            trail[0].x = mousePos.x;
            trail[0].y = mousePos.y;

            // 其餘跟隨前一個
            for (var i:int = 1; i < trailLength; i++) {
                var dx:Number = trail[i-1].x - trail[i].x;
                var dy:Number = trail[i-1].y - trail[i].y;
                trail[i].x += dx * 0.33;
                trail[i].y += dy * 0.33;
            }
        }
    }
}

應用延伸

  • 滑鼠軌跡繪圖:將殘影改為線段連接
  • 粒子尾焰:殘影用粒子元件,加入生命週期自動銷毀
  • UI 互動反饋:按鈕懸停時顯示跟隨特效
  • 遊戲特效:劍氣、魔法軌跡、彈道顯示
copyright © 萬盛學電腦網 all rights reserved
參數預設值效果建議範圍
複製數量20殘影長度10-50
縮放遞減10*i大小漸變速度5-15
透明遞減5*i淡出速度3-10
基礎跟隨係數/4 (0.25)跟隨緊度0.1-0.5
彈性係數*0.08彈性/擺動感0.02-0.15