2001.8.7 花蓮縣立 花崗國中 校內同仁暑期 Flash 5 練功房  回首頁主選單

動態控制(拖曳公轉字,滑鼠橫座標字圈影格呈一對一關係)
  1. 下載母檔:請按此處下載空白母檔,並存在「我的文件」夾中。然後打開它。
  2. 觀念構思
    ■按鈕只能「一個指令、一個動作」,不能產生連續的動作。
    ■希望利用「主場景」連續播放的影格,能替我作連續運作的「經紀人」。
    ■希望字圈動畫的「每一影格」能夠與「滑鼠橫座標」相對應。
  3. 預置元件
    ■此時你如打開右下角的「 圖庫」也可以看到以下說明。
    影片元件:母檔中「字圈(影片)」為唯一的影片元件。
    圖像元件:「 圖庫」中還有一個「字圈(靜畫)」,這是我們在「建立移動補漸動畫」時,電腦自動製作的元件。 它是內包在「字圈(影片)」的內部,不可將之刪除。
  4. 影片命名
    ■請在舞台「字圈」上按右鍵選「面板 → 實體」。在面板中「名稱」欄位填入「word」。(這是我們給字圈取的名字,以便程式呼叫它)
  5. 取得座標及影格數
    ■在主場影「指令」圖層的第一影格(左鍵)雙擊,在跳出的指令面板上按「+ 」然後選「動作 → evaluate」, 此時面板右方會出現一「;」空行,你可在下方「表示式」欄位填入下列指令
     total_w = word._width
     其中 total_w 是自設變數,word 是字圈,_width 是其寬度(以 px 為單位)。
     這句指令是將「舞台上字圈的寬度存在 total_w 變數中」。
    ■在指令面板上按「+ 」然後選「動作 → evaluate」,在下方「表示式」欄位填入下列指令
     left_p = word._x - (total_w / 2)
     其中 left_p 是自設變數,word 是字圈,_x 是其中心點的橫座標(以 px 為單位),total_w 是字圈的寬度。
     這句指令是「算出字圈左端座標,並將它存在 left_p 變數中」。
    ■在指令面板上按「+ 」然後選「動作 → evaluate」,在下方「表示式」欄位填入下列指令
     right_p = word._x + (total_w / 2)
     其中 right_p 是自設變數,word 是字圈,_x 是其中心點的橫座標(以 px 為單位),total_w 是字圈的寬度。
     這句指令是「算出字圈右端座標,並將它存在 right_p 變數中」。
    ■在指令面板上按「+ 」然後選「動作 → evaluate」,在下方「表示式」欄位填入下列指令
     total_f = word._totalframes
     其中 total_f 是自設變數,word 是字圈,_totalframes 是其內動畫的「總影格數」。
     這句指令是「算出字圈動畫的總影格數,並將它存在 total_f 變數中」。
  6. 滑鼠在中間區時
    構想:如果滑鼠游標的橫座標在「字圈」範圍內,則讓「每一滑鼠位置 → 對應字圈每一影格」。
    ■預定完成下列語法:
    if (( _xmouse > left_p ) && (_xmouse < right_p )) {
    word.stop();
    frame = int((_xmouse - left_p) * total_f / total_w );
    word.gotoAndStop( frame );
    } else if (<尚未設定>) {
    } else if (<尚未設定>) {
    }

    ■確定「指令」圖層第一影格仍在反白狀態。在指令面板上按「+ 」然後選「動作 → if」,在下方「表示式」欄位填入下列指令
    if ((_xmouse>left_p) && (_xmouse<right_p)) {
    }
    其中 _xmouse>left_p 是滑鼠在字圈左端之右,&& 是「而且」的意思,_xmouse<right_p 是滑鼠在字圈右端之左。
    ■游標在上式的 if ((_xmouse>left_p) && (_xmouse<right_p)) { 處輕觸,令其反白,,在指令面板上按「+ 」然後選「動作 → else if」,重覆兩次。結果如下:
    if ((_xmouse>left_p) && (_xmouse<right_p)) {
    } else if (<尚未設定>) {
    } else if (<尚未設定>) {
    }

    下方兩項 else if 是稍後要設定滑鼠若出現在左、右時的指令。
    ■游標在上式的 if ((_xmouse>left_p) && (_xmouse<right_p)) { 處輕觸,在指令面板上按「+ 」然後選「動作 → evaluate」,在下方「表示式」欄位填入下列指令
    word.stop()
    這句是叫字圈,一開始不要轉。
    ■接下來的指令要讓「滑鼠座標 → 對應影格數」。在指令面板上按「+ 」然後選「動作 → evaluate」,在下方「表示式」欄位填入下列指令
    frame = int((_xmouse - left_p) * total_f / total_w )
    其中 frame 是自設變數,int( ) 是取整數,將 total_f 移項到等式左邊,會發現它是比例關係。
    這句是將目前滑鼠所在座標,換算成字圈的影格。
    ■接下來的指令要讓「影片隨著滑鼠位置而改變影格」。在指令面板上按「+ 」然後選「動作 → evaluate」,在下方「表示式」欄位填入下列指令
    word.gotoAndStop( frame )
    這句是讓影片跳至對應滑鼠座標的影格。
  7. 滑鼠在左邊時
    構想:如果滑鼠跑到左方超過字圈時,讓字圈電影倒轉播放。
    ■預定完成下列語法:
    if ((_xmouse>left_p) && (_xmouse<right_p)) {
    word.stop();
    frame = int((_xmouse-left_p)*total_f/total_w);
    word.gotoAndStop(frame);
    } else if (_xmouse<=left_p) {
    word.prevFrame();
    } else if (<尚未設定>) {
    }

    ■確定「指令」圖層第一影格仍在反白狀態。滑鼠輕觸上方 } else if (<尚未設定>) { 指令使其反白
    在下方「表示式」欄位填入下列指令
    _xmouse<=left_p
    其中 _xmouse<left_p 是滑鼠在字圈左端外時。
    這句是說,如果滑鼠跑到左方時。
    在指令面板上按「+ 」然後選「動作 → if」,在下方「表示式」欄位填入下列指令
    word.prevFrame()
    這句是說,當滑鼠跑到左方超過字圈時,讓字圈電影倒轉播放。
  8. 滑鼠在右邊時
    構想:如果滑鼠跑到左方超過字圈時,讓字圈電影正轉播放。
    ■預定完成下列語法:
    if ((_xmouse>left_p) && (_xmouse<right_p)) {
    word.stop();
    frame = int((_xmouse-left_p)*total_f/total_w);
    word.gotoAndStop(frame);
    } else if (_xmouse<=left_p) {
    word.prevFrame();
    } else if (_xmouse>=right_p) {
    word.nextFrame();
    }

    ■確定「指令」圖層第一影格仍在反白狀態。滑鼠輕觸上方 } else if (<尚未設定>) { 指令使其反白
    在下方「表示式」欄位填入下列指令
    _xmouse<=right_p
    其中 _xmouse<right_p 是滑鼠在字圈右端外時。
    這句是說,如果滑鼠跑到右方時。
    在指令面板上按「+ 」然後選「動作 → if」,在下方「表示式」欄位填入下列指令
    word.nextFrame()
    這句是說,當滑鼠跑到右方超過字圈時,讓字圈電影正轉播放。
  9. 觀察成果:按 F12 看看指令是否生效。
  10. 還有問題:按照上列的語法,滑鼠離開字圈的有效範圍時,滑鼠只會轉一圈就休息了,如果我想讓它自已一直轉下去,有沒有辦法呢?
    答案就在下方!

(完成指令的) 原始檔 (內附說明)

另一範例(滑鼠橫座標字圈角度呈一對一關係),語法只有一句

原始檔

道場
本校電腦教室 B
總教頭
王建忍老師 熱情義助
工程師
黃清順、陳俊甫老師 鼎力襄贊
助教
謝盛智、江梅英老師 熱情指導
主辦單位
花崗國中教師會
彙辦
教師會理事 教務處 劉樞遠 主任
版權所有
王建忍 Copyright (c) 1999-2014 by Edson Wang. All rights reserved.