本節(jié)加了星號(hào),借黑羽的話(huà):“本節(jié)的內(nèi)容稍微有些難度,如果不明白,可以暫時(shí)不看,待日后碰到類(lèi)似問(wèn)題時(shí),再來(lái)查閱”
下面我們先用圖解法來(lái)解釋一下本實(shí)例
思路:
1.魚(yú)眼放大鏡是于若干個(gè)漸小的圓組成的;
2.使每個(gè)圓都去遮罩一個(gè)漸大的圖片來(lái)實(shí)現(xiàn),里面的小圓遮罩大較圖片,外面的大圓遮罩較小圖片;
3.還有最后一個(gè)重要的步驟是"對(duì)焦",由于圖片是漸大的,所以鼠標(biāo)所在的一個(gè)點(diǎn)位對(duì)于小圖來(lái)說(shuō)也許是頭部,而對(duì)于大圖來(lái)說(shuō)也許都到了場(chǎng)外,那么顯示出的效果就錯(cuò)了,
[AS功能代碼教程14] 魚(yú)眼放大鏡
。使用"對(duì)焦"可以讓鼠標(biāo)指在小圖上是頭部,大圖上也要是頭部,這么說(shuō)給大家一個(gè)印象,下面請(qǐng)看圖解.圖解:
1.首先在舞臺(tái)上放入兩個(gè)影片剪輯,其中一個(gè)是圖片,實(shí)例名"pic",注冊(cè)點(diǎn)在左上(0,0);另一個(gè)是圓,大。200*200,實(shí)例名"ball",注冊(cè)點(diǎn)在中心;
2.魚(yú)眼放大鏡是于若干個(gè)漸小的圓組成,讓這些圓作為鏡片,重疊在一起,同時(shí)成像,圓(鏡片)的數(shù)量越多,成像效果越細(xì),圖中數(shù)量為3
代碼如下:
var Count:Number = 3;
//復(fù)制圓(鏡片)的數(shù)量
for (var i = 0; i
< Count; i++) {
var b = ball.duplicateMovieClip("B"+i, i*2+1);
//復(fù)制圓
b._xscale = b._yscale=(1-i/Count)*100;
//圓的縮放= (1-第i個(gè)圓/圓的數(shù)量)*100,例:100~90~80~70
}
3.每個(gè)圓都加載一個(gè)漸大的圖片,先來(lái)創(chuàng)建這些漸大的圖片,圖的數(shù)量為3
代碼如下:
var Count:Number = 3;
//復(fù)制圓(鏡片)的數(shù)量
var Zoom:Number = 0.08;
//圖片放大的遞增倍數(shù)
for (var i = 0; i
< Count; i++) {
var dif = 1+i*Zoom;
//縮放比(dif)為遞增量,例:1.00~1.08~1.16~1.24...
var p = pic.duplicateMovieClip("P"+i, i*2);
//復(fù)制圖片
p._xscale = p._yscale=dif*100;
//圖片縮放=遞增量*100,例:100~108~116~124...
}
4.綜合上述實(shí)現(xiàn),里面的小圓遮罩大較圖片,外面的大圓加載較小圖片,再加入一句保存初始縮放比的語(yǔ)句
var Count:Number = 30;
//復(fù)制圓(鏡片)的數(shù)量
var Zoom:Number = 0.08;
//圖片放大的遞增倍數(shù)
for (var i = 0; i
< Count; i++) {
var dif = 1+i*Zoom;
//dif為遞增量,例:1.00~1.08~1.16~1.24...
var b = ball.duplicateMovieClip("B"+i, i*2+1);
//復(fù)制圓
b._xscale = b._yscale=(1-i/Count)*100;
//圓的縮放= (1-第i個(gè)圓/圓的數(shù)量)*100,例:100~90~80~70
b.Zoom = dif;
//保存圖片的縮放比
var p = pic.duplicateMovieClip("P"+i, i*2);
//復(fù)制圖片
p._xscale = p._yscale=dif*100;
//圖片縮放=遞增量*100,例:100~108~116~124...
p.setMask(b);
//進(jìn)行遮罩
}
5."對(duì)焦"
請(qǐng)大家看一看下面的演示動(dòng)畫(huà),也許能讓你了解他的含義
這是兩張沒(méi)有"對(duì)焦"的圖片,大家注意,如果鼠標(biāo)在小圖的紅星位置,那么對(duì)于大圖來(lái)說(shuō),也許是人物的臉部,而不是大圖的紅星位置
這是兩張執(zhí)行"對(duì)焦"后的圖片,如果鼠標(biāo)在小圖的紅星位置,那么對(duì)于大圖來(lái)說(shuō),也要在紅星位置上
如何實(shí)現(xiàn)"對(duì)焦"功能,請(qǐng)看下面代碼:
_root.onMouseMove = function() {
for (var i = 1; i <= Count; i++) {
var balls = this["B"+i];
balls._x = _xmouse;
balls._y = _ymouse;
//使每個(gè)鏡片都跟著鼠標(biāo)移動(dòng)
this["P"+i]._x = _xmouse-(_xmouse-pic._x)*balls.Zoom;
this["P"+i]._y = _ymouse-(_ymouse-pic._y)*balls.Zoom;
//調(diào)整每個(gè)復(fù)制出的圖片的位置
//新的位置 = 鼠標(biāo)位置 — (鼠標(biāo)位置 — 原圖pic的位置) * 縮放比
}
};
根據(jù) "對(duì)焦" 公式:
新的位置 = 鼠標(biāo)位置 — (鼠標(biāo)位置 — 原圖pic的位置) * 縮放比
本實(shí)例中,原圖pic的位置為左上(0,0)點(diǎn),所以,公式可以變形為:
新的位置 = 鼠標(biāo)位置 — 鼠標(biāo)位置 * 縮放比
這個(gè)公式也是本節(jié)的難點(diǎn),就以原圖位置在左上(0,0)為例
如果鼠標(biāo)在右邊,那么新位置肯的為負(fù)數(shù),新位置向左移,因?yàn)榭s放比是大于1.00的數(shù);反之,則是兩個(gè)負(fù)數(shù)相加,新位置向右移
好的,整個(gè)思路就這些,下面給出完整過(guò)程
步驟1:
首先在舞臺(tái)上放入兩個(gè)影片剪輯
其中一個(gè)是圖片,實(shí)例名”pic”,注冊(cè)點(diǎn)在左上(0,0);
另一個(gè)是圓,大小:200*200,實(shí)例名”ball”,注冊(cè)點(diǎn)在中心
步驟2:
在第一幀加入AS代碼
var Count:Number = 30;
//復(fù)制圓(鏡片)的數(shù)量
var Zoom:Number = 0.08;
//圖片放大的遞增倍數(shù)
for (var i = 0; i < Count; i++) {
var dif = 1+i*Zoom;
//dif為遞增量,例:1.00~1.08~1.16~1.24...
var b = ball.duplicateMovieClip("B"+i, i*2+1);
//復(fù)制圓
b._xscale = b._yscale=(1-i/Count)*100;
//圓的縮放= (1-第i個(gè)圓/圓的數(shù)量)*100,例:100~90~80~70
b.Zoom = dif;
//保存圖片的縮放比
var p = pic.duplicateMovieClip("P"+i, i*2);
//復(fù)制圖片
p._xscale = p._yscale=dif*100;
//圖片縮放=遞增量*100,例:100~108~116~124...
p.setMask(b);
//進(jìn)行遮罩
}
_root.onMouseMove = function() {
for (var i = 1; i <= Count; i++) {
var balls = this["B"+i];
balls._x = _xmouse;
balls._y = _ymouse;
//使每個(gè)鏡片都跟著鼠標(biāo)移動(dòng)
this["P"+i]._x = _xmouse-(_xmouse-pic._x)*balls.Zoom;
this["P"+i]._y = _ymouse-(_ymouse-pic._y)*balls.Zoom;
//調(diào)整每個(gè)復(fù)制出的圖片的位置
//新的位置 = 鼠標(biāo)位置 — (鼠標(biāo)位置 — 原圖pic的位置) * 縮放比
}
};