多個(gè)朋友因工作或愛好的需要,詢問如何用flash在有限的頁面內(nèi)制作大的地圖,并鏈接、顯示有關(guān)地點(diǎn)的信息,為此將我自己做的一個(gè)記錄旅游地點(diǎn)的flash地圖略作精簡、修改,做了這個(gè)flash,并將關(guān)鍵部分做法介紹如下(原有的那個(gè)包括顯示信息中的文字和采用的旅游照片,將近10 M,太大了,無法上傳)。
作品見下方(好久沒發(fā)帖了,不知該怎么發(fā)swf文件了,把考屏圖放下面方便了解)
特點(diǎn):
縮小地圖以適應(yīng)頁面大小的局限,用放大鏡來放大縮小了的地圖,使能清晰的看到需要的細(xì)節(jié)。使用AS糾正普通遮罩制作放大鏡錯(cuò)位較大的缺陷,放大部分在鏡片的中心(紅十字處)沒有錯(cuò)位。用鼠標(biāo)經(jīng)過、離開按鈕的AS來控制顯示有關(guān)需要的信息(作品中鼠標(biāo)在放大鏡的中心紅十字處)。
因?yàn)榈貓D窗口大小同選的地圖長寬要成比例,如果頁面合適,也可以讓信息同時(shí)在地圖窗口的右邊或下面顯示,我自己做的記錄旅游地點(diǎn)的地圖,文字信息是在右邊顯示,用組件加滾動(dòng)條;照片用MC元件,位置在地圖窗口內(nèi),循環(huán)播放,這樣顯示的信息量可以非常大。圖一(信息顯示另一做法)
本作品僅作為示意,1、各地的朋友千萬不要在地理問題上拍磚哦。2、一些距離太近的城市偷懶沒設(shè)定信息顯示鏈接(解決辦法是縮小按鈕的反應(yīng)面積)。3、為便于上傳,地圖只放大了1倍,圖片的品質(zhì)也選定得很低。4、同樣,示意中只有北京同時(shí)采用顯示1張圖片。
做法簡介:
1、各圖層拷屏如圖2,為了容易看清做法,圖層分得細(xì)了些。
舞臺(tái)(或地圖窗口)大小同選的地圖長寬要成比例(便于滿舞臺(tái)顯示不變形),我用的舞臺(tái)是400*330,地圖是800*660(這2個(gè)尺寸在下面幀動(dòng)作中要用),只放大1倍。放大倍數(shù)可自己確定,只需在步驟7的幀動(dòng)作AS中改動(dòng)相應(yīng)數(shù)據(jù)即可。
友情提示:如果地圖窗口小于舞臺(tái),地圖窗口的坐標(biāo)應(yīng)該是(0,0)。圖二:
2、新建電影剪輯元件(即MC)“地圖元件”,把選定的地圖圖片導(dǎo)入,圖片的X、Y坐標(biāo)都是0,即左上角對(duì)著元件界面的 + 處。簡單辦法是選中圖片,打開屬性面板,把X、Y 都改為0,然后用Enter鍵確定。
3、把做好的MC拖入場景“小圖”圖層中,在場景的屬性中設(shè)定MC坐標(biāo)為(0,0),寬、高數(shù)值同舞臺(tái)一致,然后用Enter鍵確定。
4、把做好的MC再拖入場景“大圖”圖層中,MC在場景中的坐標(biāo)也設(shè)定為(0,0),選中“大圖”圖層中的MC,在屬性中命名為aa,
5、做放大鏡
新建MC元件“放大鏡元件”,畫圓,圓的左右上下均必須居中。用剪切、粘貼到當(dāng)前位置的辦法,把圓的色塊和邊框分別放在2個(gè)圖層中。把鏡片圖層中的顏色塊轉(zhuǎn)換為MC元件“鏡片元件”。在“放大鏡元件”中選中鏡片MC,在屬性中命名為ee。顏色塊是做遮罩用的,在swf文件中看不到它,只是在有顏色的部分能看到被遮蔽的“大圖”圖層中的畫面,所以顏色任意。鏡框在swf文件中是看得到的,顏色、式樣自定。再增加1個(gè)圖層放十字線,同鏡框一樣在swf文件中是看得到的。用“極細(xì)”線。
友情提示:如果工作中需要比例尺,也可經(jīng)過計(jì)算,把十字線設(shè)定為比例尺,計(jì)算法如下:
每格標(biāo)注的距離=每格對(duì)應(yīng)的地圖上兩點(diǎn)間實(shí)際距離*每格像素/地圖上該距離的像素。
實(shí)際操作,可以測定在地圖上已知距離的水平(或豎直)的兩點(diǎn)之間的像素值,計(jì)算出1個(gè)像素在地圖上是多少公里,再確定鏡片上每格幾個(gè)像素,標(biāo)定比例尺。
6、把“放大鏡元件”MC拖入場景放大鏡圖層。選中放大鏡MC,命名為ff。
7、AS
回顧一下,上面已經(jīng)分別為3個(gè)MC命名了,命名應(yīng)該同下面AS中一致,不能搞錯(cuò)。
場景中大地圖MC命名為aa,
場景中放大鏡MC,命名為ff。
放大鏡元件中放大鏡鏡片MC,命名為ee,
在AS圖層選中幀,寫如下幀動(dòng)作
_root.onEnterFrame = function() {
Mouse.hide();//隱藏鼠標(biāo)
startDrag("_root.ff", true);// 控制望遠(yuǎn)鏡ff隨鼠標(biāo)移動(dòng)
_root.aa.setMask(_root.ff.ee) //用ff中的ee遮蔽aa
_root.aa._x=_root._xmouse*(1-80/40);//用鼠標(biāo)坐標(biāo)控制大畫面x坐標(biāo)跟隨
_root.aa._y=_root._ymouse*(1-66/33);//用鼠標(biāo)坐標(biāo)控制大畫面y坐標(biāo)跟隨
}
因?yàn)榉糯箸R中有看得見與看不見的兩種圖形,所以用AS腳本控制遮罩,
_root.aa.setMask(_root.ff.ee)
即用ff中的ee遮蔽aa——括號(hào)內(nèi)的是遮蔽MC,前邊的是被遮蔽MC。
用鼠標(biāo)坐標(biāo)控制大畫面跟隨
_root.aa._x=_root._xmouse*(1-800/400);//用鼠標(biāo)坐標(biāo)控制大畫面x坐標(biāo)跟隨
_root.aa._y=_root._ymouse*(1-660/330);//用鼠標(biāo)坐標(biāo)控制大畫面y坐標(biāo)跟隨
按我的計(jì)算,要保持不錯(cuò)位,放大圖片aa的x坐標(biāo)應(yīng)該是:(1—放大倍數(shù))乘以鼠標(biāo)的x坐標(biāo)值(同樣,y坐標(biāo)也是這么計(jì)算),現(xiàn)在畫面的放大倍數(shù)是800/400,因此
_root.aa._x=_root._xmouse*(1-800/400);
800是本作品的地圖寬,400是flash舞臺(tái)寬度(可以約分,怕說明太費(fèi)事了),制作時(shí)要根據(jù)自己作品的地圖和flash的實(shí)際像素大小更改。
同樣,_root._ymouse*(1-660/330)中也這樣。
8、在“地圖元件”中增加按鈕,在“地圖元件”中增加1個(gè)圖層放按鈕。分別選中每一個(gè)按鈕,寫上AS。以“北京”為例,AS如下:
(rollOver) {
_root.gotoAndStop(2);
}
on (rollOut) {
_root.gotoAndStop(1);
}
因?yàn)榘存I設(shè)在MC地圖元件中,卻是控制場景的動(dòng)作,所以在AS中加了_root.,on (rollOver)時(shí), gotoAndStop哪一幀,就在那幀上制作需要的信息。本作品北京的信息制作在第2幀,因此gotoAndStop(2),共在31個(gè)城市制作了信息示意。on (rollOut)都是回到第1幀。
友情提示;
按上面的控制地圖移動(dòng)的辦法,鼠標(biāo)要停留在某一個(gè)特定的點(diǎn)上(例如本例中閃動(dòng)的紅圓),實(shí)際上只能是在flash中的一個(gè)特定的位置上。因此,只要避開這個(gè)位置,盡可以隨意安排需要顯示的信息的位置、大小及數(shù)量。本例中只有1個(gè)拉薩的信息因被遮擋放右邊。
如果頁面合適,也可以讓文字、圖片信息同時(shí)在地圖窗口之外的右邊或下面顯示,但要在左邊、上邊顯示,則地圖坐標(biāo)的計(jì)算會(huì)復(fù)雜許多,沒有必要。
其他部分常規(guī)制作從源文件中即可一目了然,不再一一介紹。