注:以下教程均是在Flash MX版本下進行!
在網(wǎng)上經(jīng)??吹降膄lash影片中有的對象可以被鼠標(biāo)進行拖動。例如有的類似七巧板的拼圖游戲,控制音量的滑桿等,所使用的就是flash中的拖拽動作。
一、拖拽命令詳細介紹
?。薄⑹紫冉榻B一下開始拖拽命令的詳細用法,稍后在后面的例子中進行測試。
命令格式: StartDrag(要拖動的影片剪輯,[是否鎖定到鼠標(biāo)位置中央,左,上,右,下])
或?qū)憺?br>
要拖動的影片剪輯.StartDrag([是否鎖定到鼠標(biāo)位置中央,左,上,右,下])
命令講解:在制作動畫的過程中,上面兩種書寫方法可任選一種。其中[]內(nèi)的為可選參數(shù),也就是可以寫,也可以不寫。至于左,上,右,下四個參數(shù)是用來控制被拖對象的移動范圍。
?。病⑼V雇献钪v解
命令格式: 被拖動的影片剪輯實例名.stopDrag()
這樣就可以停止對對象的拖拽動作。
二、實例講解
下面來用一個簡單的例子實驗拖拽命令。
操作步驟:
1、新建一個flash文檔,并在舞臺上繪制一個圓形。選中圓形并按F8,將此圓形轉(zhuǎn)換為影片剪輯,起名為:圓 。確定后將會在舞臺上創(chuàng)建一個圓的實例。如下圖:
?。病⑦x中此實例,并按F9打開動作面板。輸入如下腳本:
on (press) {
this.startDrag(true);//當(dāng)鼠標(biāo)按下(press)之后,這個實例(因為我們把腳本寫在實例本身了,所以這里用this代替影片剪輯實例的名字)可以被拖拽,使用命令如上面的命令解釋。對于參數(shù)的選擇方面,這里只填寫了鎖定到鼠標(biāo)位置中央,如果想選不鎖定到鼠標(biāo)位置中央,可以把true改為false。有興趣的朋友可以更改為false看看。
}
on (release) {
this.stopDrag();//同樣道理,當(dāng)鼠標(biāo)釋放(release)之后,將停止拖拽動作。
}
腳本書寫如下圖:
?。?、好了,現(xiàn)在讓我們按Ctrl+回車來測試一下吧,你將會看到舞臺上的圓被你的鼠標(biāo)拖動的效果。
?。?、OK,通過這個例子我們可以簡單的應(yīng)用拖拽動作了。現(xiàn)在需要把這個例子繼續(xù)完成,還記得上面命令講解中的左,上,右,下四個控制拖動范圍的參數(shù)嗎?現(xiàn)在來制作具有約束拖動范圍的效果。
5、現(xiàn)在在舞臺上繪制一個200*100大小的矩形,注意只要邊框不要填充。如下圖:
?。丁⑷绻覀兿M谕蟿拥臅r候這個圓只能在矩形內(nèi)拖動的話,就要先設(shè)置這個矩形的坐標(biāo),并記下矩形四個頂點的坐標(biāo)(這點很重要?。?。OK,比如,現(xiàn)在此例子中的矩形的四個頂點分別如上圖所示。那我們要取的四個參數(shù)就應(yīng)該是:左=50,上=100,右=250,下=200 現(xiàn)在打開動作面板,修改剛才的腳本如下:
on (press) {
this.startDrag(true, 50, 100, 250, 200);//這里我們就使用剛才確定好的4個參數(shù)。4個點的參數(shù)就對拖動對象實現(xiàn)了一個矩形區(qū)域的移動約束!
}
on (release) {
this.stopDrag();
}
腳本編寫最后效果如下圖:
7、呵呵,迫不及待的想檢測你的成果吧?好了,按Ctrl+回車去測試吧!
好了,關(guān)于拖拽的講解先到這里,下面我們來學(xué)習(xí)如何結(jié)合著拖拽動作來檢測對象之間的碰撞!不要走開哦?。海?
三、碰撞命令的講解
命令格式: 目標(biāo)影片剪輯的實例.hitTest(被拖拽的實例) 這個是比較簡單的檢測碰撞命令
目標(biāo)影片剪輯的實例.hitTest(被拖拽實例的X軸坐標(biāo),被拖拽實例的Y軸坐標(biāo),對象的矩形區(qū)域范圍還是對象本身范圍) 這個是比較復(fù)雜點的檢測碰撞命令
命令解釋: 以上兩個命令都是用來檢測碰撞的,可以根據(jù)需要選擇不同的命令。重點解釋一下對象的矩形區(qū)域范圍和對象本身范圍(上面的命令中,false表示對象的矩形區(qū)域范圍,true表示對象本身的范圍)具體分別看下圖:
四、碰撞命令與拖拽命令的結(jié)合使用
?。ㄒ唬?、下面通過簡單的例子來學(xué)習(xí)碰撞命令(我們先來學(xué)習(xí)如何檢測是否碰到對象的矩形區(qū)域范圍)
1、新建一個flash文檔,在舞臺上繪制一個圓形。選中圓形并按F8將它轉(zhuǎn)換為影片剪輯,起名:圓 。這樣就在舞臺上創(chuàng)建了一個圓的實例?!∪缦聢D:
?。病⑦x中此實例,為它起一個名字,此例起名為:yuan 如圖:
?。场⑦x擇文字工具,并選擇文字類型為“動態(tài)文本”,在圓的實例下面拖繪出一個動態(tài)文本框。并起一個變量名為:tt 如下圖:
?。?、選中時間軸的第一楨,按F9打開動作面板,輸入以下腳本:
_root.onenterframe = function() {
//這個是在時間軸上的AS編寫規(guī)則,解釋為舞臺上每楨都執(zhí)行下面的腳本(onenterframe)。
if (_root.yuan.hitTest(_root._xmouse, _root._ymouse, false)) {
//根據(jù)上面命令的講解,這個語句就是檢測碰撞了。如果鼠標(biāo)碰到舞臺上yuan這個實例的矩形區(qū)域范圍的話,就執(zhí)行下面的腳本。
tt = "接觸矩形區(qū)域范圍";//動態(tài)文本框就顯示出“接觸矩形區(qū)域范圍”
} else {
tt = "沒有接觸到矩形區(qū)域范圍";//如果鼠標(biāo)沒有碰到舞臺上yuan這個實例的矩形區(qū)域范圍的話,就顯示沒有接觸到矩形區(qū)域范圍。
}
}
第一楨上最后的完整腳本應(yīng)該是如下圖所示:
?。?、OK,現(xiàn)在可以按Ctrl+回車去測試你的成果咯。
?。ǘ⑼献鲎矙z測
現(xiàn)在再來一個例子講解拖拽碰撞檢測,想偷懶的話可以通過修改上面例子的代碼來學(xué)習(xí)。
1、現(xiàn)在稍微修改一下上面的例子,以便讓我們學(xué)習(xí)拖拽碰撞檢測,在上面例子的舞臺上繪制一個矩形,并把這個矩形轉(zhuǎn)換成電影剪輯,起名為:矩形 。這樣就在舞臺上又創(chuàng)建了一個矩形的實例,現(xiàn)在為這個矩形實例起一個名為:juxing 。如下圖:
?。?、選中這個矩形實例,打開動作面板,輸入可以拖拽這個實例的腳本。如下:
on (press) {
this.startDrag(true);
}
on (release) {
this.stopDrag();
}
這個腳本就是為了能拖動這個矩形實例。具體解釋請參閱第一個拖動對象例子的腳本說明。
3、現(xiàn)在來修改腳本,選中時間軸的第一楨,按F9打開動作面板,你將會看到上個例子的碰撞檢測腳本,把它修改為如下腳本:
_root.onenterframe = function() {
if (_root.yuan.hitTest(_root.juxing)) {
tt = "碰到了";
} else {
tt = "沒有碰到";
}
}
這個腳本和上次的碰撞檢測腳本類似,只不過不需要再書寫X軸和Y軸,也不用寫是否碰到矩形區(qū)域范圍。簡單吧 ^_^
完整腳本應(yīng)該如下圖所示:
?。希耍F(xiàn)在又到了測試階段了,去觀看你的成果吧~
結(jié)束語:相信你如果親手成功完成了以上的例子(呵呵,比較多),你一定會掌握拖動對象以及碰撞檢測的腳本編寫。在實際的應(yīng)用中,它們的用處非常廣泛……