萬盛學電腦網

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

Flash 程式化繪圖:隨機圓弧生成器核心代碼解析 (AS2)

功能概覽

可互動調整參數(角度、圈數、半徑、線寬、顏色、軌跡/葉子模式)的程式化圓弧繪製工具,展示 Flash 繪圖 API (`lineStyle`、`moveTo`、`curveTo`) 進階應用。

核心函數架構

1. `draw_small_arc`:單段 ≤45° 圓弧(二次貝茲曲線逼近)

function draw_small_arc(mc, ox, oy, r, origin_angle, angle, thickness, rbg, alpha):Object {
    // 角度標準化、控制點計算(幾何推導:弦長、 sagitta)
    // 使用 curveTo 繪製,返回終點座標
}

關鍵數學:二次貝茲曲線控制點距離 `ctrl_r = r / cos(angle/2)`,控制點角度為 `origin_angle + angle/2`。

2. `draw_arc`:任意角度圓弧(分段調用 `draw_small_arc`)

function draw_arc(mc, ox, oy, r, origin_angle, angle, thickness, rbg, alpha):Object {
    var times = int(Math.abs(angle)/45);
    var last_angle = Math.abs(angle)%45;
    for (i=0; i<times; i++) draw_small_arc(..., 45*i+origin_angle, 45, ...);
    return draw_small_arc(..., 45*times+origin_angle, last_angle, ...);
}

3. 輔助函數

  • `maintain_digit(val, n)`:四捨五入保留 n 位小數,避免浮點誤差累積。
  • `sinD(angle)`、`cosD(angle)`:角度制三角函數封裝。
  • `rnd_color()`:隨機 24bit 顏色整數。
  • 預設調色盤 `color_arr`、`leaf_color_arr`:避免純隨機顏色過於難看。

互動狀態變數

var origin_angle, angle, angle_rnd, dir, old_dir, time;
var posx, posy, pos_obj, r, thickness;
var is_trace, leaf_grow;
var line_mc; // 繪圖容器,綁定遮罩 mask

初始化流程 `init_prop()`

function init_prop() {
    line_mc.removeMovieClip();
    line_mc = createEmptyMovieClip("line_mc", 1);
    line_mc.setMask(mask); // 舞台元件 mask 限制可視區域
    line_mc._x = mask._x; line_mc._y = mask._y;
    origin_angle = random(4)*90; // 0/90/180/270 度隨機起始
    angle = get_txt_value(angle_txt, 0, ...); // 讀取 UI 輸入
    // ... 其餘參數同理讀取
}

應用場景

  • 程式化藝術生成器、背景裝飾動畫。
  • 遊戲特效:技能軌跡、魔法陣展開、粒子路徑。
  • 教學示範:貝茲曲線逼近圓弧、極座標轉換、矩陣疊加變換。

遷移至 AS3/HTML5 Canvas 建議

  • 改用 `Graphics` 類別 (`graphics.lineStyle`、`graphics.curveTo`)。
  • 採用 `Shape` 或 `Sprite` 替代 `MovieClip` 繪圖容器。
  • 事件模型改為 `Event.ENTER_FRAME` 或 `Timer`。
  • Web 端可用 Canvas 2D Context `quadraticCurveTo` 直接移植邏輯。
copyright © 萬盛學電腦網 all rights reserved