日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

Flash AS入門教程第七課:影片剪輯第五節(jié)_拖動(dòng)與碰撞檢測_Flash教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:Flash AS入門教程:文本與字符實(shí)例—打字游戲制作
簡介:本例繼續(xù)講解AS的基礎(chǔ)知識,前幾節(jié)課我們學(xué)習(xí)了AS中的文本與符的理論知識,今天來實(shí)際操作一下,制作一個(gè)打字游戲,對Flash的AS編程有興趣的朋友可以到論壇與作者交流~~本文由中國教程

本文由中國教程網(wǎng) sanbos 原創(chuàng),轉(zhuǎn)載請保留此信息!

第五節(jié) 拖動(dòng)與碰撞檢測

AS的一個(gè)重要優(yōu)勢就是可以實(shí)現(xiàn)交互動(dòng)畫,一些特效不用AS也是可以做出來的,但交互的動(dòng)畫不用AS則是無法實(shí)現(xiàn)的。拖動(dòng)MC則是交互動(dòng)畫的一個(gè)例子。

startDrag() 函數(shù)或 MovieClip.startDrag() 方法:
使用startDrag()可以實(shí)現(xiàn)拖動(dòng)效果。格式:
MC.startDrag(一個(gè)布爾值,左邊,上邊,右邊,下邊);
這個(gè)方法中的所有參數(shù)都是可選的,即可要可不要。下面介紹一下這些參數(shù):
一個(gè)布爾值:true或false。當(dāng)設(shè)定為true時(shí)鼠標(biāo)位置將鎖定在要拖動(dòng)的MC的注冊點(diǎn)上。想一想我們要自定義鼠標(biāo)指針,這個(gè)參數(shù)是不是很有用呢?
后面的4個(gè)邊,確定了MC可以被拖動(dòng)的范圍。想一想我們要做一個(gè)控制滑條這幾個(gè)參數(shù)是不是很有用呢?

下面練習(xí)一下:

自定義鼠標(biāo)指針:
新建一個(gè)MC,畫一個(gè)或找一個(gè)你喜歡的鼠標(biāo)圖形,圖形應(yīng)該有一個(gè)較尖的部位作為針尖吧?將這個(gè)針尖與窗口中的十字對齊�;氐街鲌鼍�,將這個(gè)MC拖到舞臺上,打開屬性面板,實(shí)例名稱為:mouse_mc;打開幀動(dòng)作面板輸入:

Mouse.hide();
mouse_mc.startDrag(true);

測試影片,你會發(fā)現(xiàn)你的鼠標(biāo)已經(jīng)變成你喜歡的圖形了。

stopDrag()方法:

上面介紹了開始拖動(dòng)MC的方法,開始拖動(dòng)總得有停止拖的時(shí)候啊,這個(gè)方法就是停止拖動(dòng)。我們回想一下拖動(dòng)一個(gè)MC的過程,一般來說,都是點(diǎn)下鼠標(biāo)左鍵不放,就可以拖動(dòng)了,放開鼠標(biāo)后就停止拖動(dòng),是這樣的吧?所以一般將startDrag()放到MC的onPress事件(點(diǎn)下鼠標(biāo)時(shí))中,而將 stopDrag()放到onRelease事件(放開鼠標(biāo)時(shí))中。

滑動(dòng)控制條:

有時(shí)我們會用到滑動(dòng)控制條,比如控制音量大小,播放進(jìn)度等。那么滑塊就需要用到拖動(dòng)的方法。
用矩形工具畫一個(gè)細(xì)長的矩形,筆觸填充公隨你喜歡,要不要都行,至少要一個(gè)吧?將它轉(zhuǎn)換為MC,雙擊它進(jìn)入編輯狀態(tài),打開對齊面板選擇相對于舞臺,左對齊,回到主場景,打開屬性面板,實(shí)例名稱為blt_mc。然后再畫一個(gè)很短的矩形,做滑塊,也轉(zhuǎn)換為MC,也同細(xì)長的矩形一樣的做法,只是居中對齊,最后的實(shí)例名為hk_mc。
blt_mc移到你想它所處的位置,將hk_mc移到blt_mc上。

在幀動(dòng)作面板中輸入:

l = blt_mc._x;
r = l blt_mc._width;
h = blt_mc._y;
hk_mc.onPress = function(){
this.startDrag("true",l,h,r,h);
}
hk_mc.onRelease = function(){
stopDrag();
num = (hk_mc._x-blt_mc._x)/blt_mc._width;
}

測試影片,拖動(dòng)滑塊會發(fā)現(xiàn)滑塊只能在進(jìn)度條的范圍內(nèi)拖動(dòng)了。這是因?yàn)槲覀儗tartDrag()由于方法運(yùn)用了4個(gè)參數(shù):l,r,h.它們分別是進(jìn)度條的左右邊的x位置及y軸的位置�;瑝K的移動(dòng)范圍被限定在這個(gè)范圍內(nèi)。

從上面的代碼中可以看出,當(dāng)鼠標(biāo)放開時(shí)會產(chǎn)生一個(gè)num變量,這個(gè)變量是用滑塊的x坐標(biāo)減去進(jìn)度條的x坐標(biāo)除以進(jìn)度條的長度,這樣就可以得到一個(gè)0~1的數(shù)字。有了這個(gè)數(shù)字,我們就可以用于任何需要用數(shù)字控制的對象了。


_droptarget 屬性:

可能會有這種情況,我們拖動(dòng)一個(gè)對象,想知道它是否被拖到了另一個(gè)對象之上,比如我們拖動(dòng)蘋果到盤子中,我們可能想知道蘋果是否被拖到了盤子之上,如果是蘋果則定位到盤子上,如果不是蘋果就掉到深淵中。MC的_droptarget 屬性將返回被自已重疊在下面的MC的名稱。比如將蘋果拖到盤子上時(shí),蘋果將盤子壓在下面,蘋果的_droptarget 屬性將返回盤子的名稱。但它返回的名稱是帶反斜杠的格式的,因此需要用eval()將其轉(zhuǎn)換為標(biāo)準(zhǔn)格式,如:eval(蘋果. _droptarget)這一句結(jié)果是:盤子。

做個(gè)練習(xí)熟悉一下:
在舞臺上畫兩個(gè)園,不同的顏色,均轉(zhuǎn)換為MC,實(shí)例名稱分別為:mc1_mc,mc2_mc.右擊mc1_mc>排列>移至頂層;打開動(dòng)作面板,輸入:

mcx = mc1_mc._x;
mcy = mc1_mc._y;
mc1_mc.onPress = function(){
this.startDrag(true);
}
mc1_mc.onRelease = function(){
stopDrag();
if(eval(mc1_mc._droptarget)==mc2_mc){
this._x = mc2_mc._x;
this._y = mc2_mc._y;
} else {
this._x = mcx;
this._y = mcy;
}
}

測試影片,在mc1_mc上點(diǎn)擊時(shí)可以拖動(dòng),將它拖到mc2_mc上放開鼠標(biāo),則與mc2_mc重疊,如果不在mc2_mc上放開鼠標(biāo),則回到原位。

這種檢查一個(gè)MC是否被拖到另一個(gè)MC之上還有另一種方法,那就是碰撞檢測。代碼中第一句將系統(tǒng)鼠標(biāo)隱藏起來,第二句使你的圖形可以拖動(dòng)了,并且鼠標(biāo)指針被定位在針尖處。使用自定義鼠標(biāo)要注意的是,你不能再拖動(dòng)第二個(gè)MC,因?yàn)橐淮沃荒芡蟿?dòng)一個(gè)MC,當(dāng)你拖動(dòng)第二個(gè)MC時(shí),你的鼠標(biāo)圖形將不會再被拖動(dòng)了。

_droptarget 屬性:

可能會有這種情況,我們拖動(dòng)一個(gè)對象,想知道它是否被拖到了另一個(gè)對象之上,比如我們拖動(dòng)蘋果到盤子中,我們可能想知道蘋果是否被拖到了盤子之上,如果是蘋果則定位到盤子上,如果不是蘋果就掉到深淵中。MC的_droptarget 屬性將返回被自已重疊在下面的MC的名稱。比如將蘋果拖到盤子上時(shí),蘋果將盤子壓在下面,蘋果的_droptarget 屬性將返回盤子的名稱。但它返回的名稱是帶反斜杠的格式的,因此需要用eval()將其轉(zhuǎn)換為標(biāo)準(zhǔn)格式,如:eval(蘋果. _droptarget)這一句結(jié)果是:盤子。

做個(gè)練習(xí)熟悉一下:
在舞臺上畫兩個(gè)園,不同的顏色,均轉(zhuǎn)換為MC,實(shí)例名稱分別為:mc1_mc,mc2_mc.右擊mc1_mc>排列>移至頂層;打開動(dòng)作面板,輸入:

mcx = mc1_mc._x;
mcy = mc1_mc._y;
mc1_mc.onPress = function(){
this.startDrag(true);
}
mc1_mc.onRelease = function(){
stopDrag();
if(eval(mc1_mc._droptarget)==mc2_mc){
this._x = mc2_mc._x;
this._y = mc2_mc._y;
} else {
this._x = mcx;
this._y = mcy;
}
}

測試影片,在mc1_mc上點(diǎn)擊時(shí)可以拖動(dòng),將它拖到mc2_mc上放開鼠標(biāo),則與mc2_mc重疊,如果不在mc2_mc上放開鼠標(biāo),則回到原位。

這種檢查一個(gè)MC是否被拖到另一個(gè)MC之上還有另一種方法,那就是碰撞檢測。

hitTest()方法:
該方法將檢測MC是否與某點(diǎn)或與另一MC發(fā)生相交(碰撞)。如果發(fā)生相交則返回true,否則返回false.

用法:1.與某點(diǎn)相交: MC.hitTest(x,y,true或false);
這將檢測MC是否與括號中的x,y所確定的點(diǎn)(x,y)相交。后面的布爾值如果為ture,那么將檢測MC的實(shí)際圖形范圍,如果為false則檢測MC的外框是否與(x,y)相交。
2.MC與MC相交:MC.hitTest(另一MC).

把上面的的練習(xí)改為下面的代碼,可得到相同的結(jié)果:

mcx = mc1_mc._x;
mcy = mc1_mc._y;
mc1_mc.onPress = function(){
this.startDrag(true);
}
mc1_mc.onRelease = function(){
stopDrag();
if(this.hitTest(mc2_mc)){
this._x = mc2_mc._x;
this._y = mc2_mc._y;
} else {
this._x = mcx;
this._y = mcy;
}

}

分享:Flash教程:旋轉(zhuǎn)花朵效果的制作
效果演示: 本課中的內(nèi)容涉及:函數(shù)定義, for...in 語句, .onEnterFrame 三個(gè)關(guān)鍵內(nèi)容,函數(shù)的作用是實(shí)現(xiàn)代碼的重用,配合for...in語句可批量賦予函數(shù).望初學(xué)者仔細(xì)閱讀.思路:1.使用for...in

來源:中國教程網(wǎng)//所屬分類:Flash教程/更新時(shí)間:2009-03-13
相關(guān)Flash教程