- 下載母檔:請按此處下載空白母檔,並存在「我的文件」夾中。然後打開它。
- 觀念構思:
■按鈕只能「一個指令、一個動作」,不能產生連續的動作。
■希望利用「主場景」連續播放的影格,能替我作連續運作的「經紀人」。
■希望字圈動畫的「每一影格」能夠與「滑鼠橫座標」相對應。
- 預置元件:
■此時你如打開右下角的「
圖庫」也可以看到以下說明。
影片元件:母檔中「字圈(影片)」為唯一的影片元件。
圖像元件:「
圖庫」中還有一個「字圈(靜畫)」,這是我們在「建立移動補漸動畫」時,電腦自動製作的元件。 它是內包在「字圈(影片)」的內部,不可將之刪除。
- 影片命名:
■請在舞台「字圈」上按右鍵選「面板 → 實體」。在面板中「名稱」欄位填入「word」。(這是我們給字圈取的名字,以便程式呼叫它)
- 取得座標及影格數:
■在主場影「指令」圖層的第一影格(左鍵)雙擊,在跳出的指令面板上按「+ 」然後選「動作 → 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 變數中」。
- 滑鼠在中間區時:
構想:如果滑鼠游標的橫座標在「字圈」範圍內,則讓「每一滑鼠位置 → 對應字圈每一影格」。
■預定完成下列語法:
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 )
這句是讓影片跳至對應滑鼠座標的影格。
- 滑鼠在左邊時:
構想:如果滑鼠跑到左方超過字圈時,讓字圈電影倒轉播放。
■預定完成下列語法:
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()
這句是說,當滑鼠跑到左方超過字圈時,讓字圈電影倒轉播放。
- 滑鼠在右邊時:
構想:如果滑鼠跑到左方超過字圈時,讓字圈電影正轉播放。
■預定完成下列語法:
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()
這句是說,當滑鼠跑到右方超過字圈時,讓字圈電影正轉播放。
- 觀察成果:按 F12 看看指令是否生效。
- 還有問題:按照上列的語法,滑鼠離開字圈的有效範圍時,滑鼠只會轉一圈就休息了,如果我想讓它自已一直轉下去,有沒有辦法呢?
答案就在下方!
(完成指令的) 原始檔 (內附說明)
|