在上一講中我們介紹了制作一個(gè)最為簡單的Flash電子地圖的基本步驟(《
nclick="return false;" >Flash互動(dòng)電子地圖制作手冊——入門實(shí)例 》)。但對于制作數(shù)據(jù)量較大的大型城市地圖,直接在Flash環(huán)境中手動(dòng)創(chuàng)建地名標(biāo)注內(nèi)容不僅工作量巨大,而且維護(hù)更新非常不便,這樣就必須借助外部數(shù)據(jù)文件來輔助完成其中的地名標(biāo)注工作。當(dāng)然,調(diào)用數(shù)據(jù)文件的方法很多,我們這里介紹一種較為簡單的,即在FLASH中調(diào)用外部XML數(shù)據(jù)文件。
點(diǎn)擊查看更多Flash精彩實(shí)例
既然涉及XML文件,就有必要對XML有一個(gè)初步的了解。
一、初識(shí) XML 1、什么是XML? XML 是英文Extensible Markup Language的縮寫,中文意為可擴(kuò)展的標(biāo)記語言。XML是一套定義語義標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對這些部件加以標(biāo)識(shí)。它也是元標(biāo)記語言,即定義了用于定義其他與特定領(lǐng)域有關(guān)的、語義的、結(jié)構(gòu)化的標(biāo)記語言的句法語言。
2、XML文件式樣 以下為一個(gè)XML文件結(jié)構(gòu),有些類似HTML語言:
<?xml version="1.0" encoding="utf-8" ?> <countrydata> <state id="range"> <data>0 - 33</data> <color>fed976</color> </state> <state id="range"> <data>34 - 66</data> <color>feb24c</color> </state> <state id="range"> <data>67 - 99</data> <color>fd8d3c</color> </state> </countrydata>
二、Flash調(diào)用XML文件的方法 Flash中的Actionscript2.0關(guān)于調(diào)用XML的全局函數(shù)與方法屬性較多,以下只介紹本例中涉及的內(nèi)容: 1、建立XML對象: var myXML = new XML(); 2、引用XML文件: myXML.load("data.xml"); 3、忽略空格: myXML.ignoreWhite = true;//默認(rèn)的為false 4、處理XML對象的load(XML.load 方法) public load(url:String) : Boolean
從指定的 URL 中加載 XML 文檔,并使用下載的 XML 數(shù)據(jù)替換指定 XML 對象的內(nèi)容。該 URL 是相對 URL,并使用 HTTP 進(jìn)行調(diào)用。加載過程是異步的;它不會(huì)在執(zhí)行 load() 方法后立即結(jié)束。
執(zhí)行 load() 方法時(shí),XML 對象的 loaded 屬性被設(shè)置為 false。在 XML 數(shù)據(jù)下載完畢后,loaded 屬性被設(shè)置為 true,并調(diào)用 onLoad 事件處理函數(shù)。直到 XML 數(shù)據(jù)完全下載后,才開始分析。如果該 XML 對象以前包含任何 XML 樹,它們將被放棄。
您可以定義一個(gè)在調(diào)用 XML 對象的 onLoad 事件處理函數(shù)時(shí)執(zhí)行的自定義函數(shù)。
5、處理XML對象的onLoad(XML.onLoad 處理函數(shù)) onLoad = function(success:Boolean) {} 收到來自服務(wù)器的 XML 文檔時(shí)由 Flash Player 調(diào)用。如果成功接收了 XML 文檔,則 success 參數(shù)為 true。如果未收到該文檔,或從服務(wù)器接收響應(yīng)時(shí)出現(xiàn)錯(cuò)誤,則 success 參數(shù)為 false。默認(rèn)情況下,此方法的實(shí)現(xiàn)不處于活動(dòng)狀態(tài)。若要覆蓋默認(rèn)實(shí)現(xiàn),必須指定一個(gè)包含自定義動(dòng)作的函數(shù)。
三、實(shí)例制作
在初步了解了以上XML的基礎(chǔ)后,我們就可以緊接上一例的步驟完成地名標(biāo)注工作:
1、創(chuàng)建用于地名標(biāo)注的XML文件 : 首先我們要?jiǎng)?chuàng)建一個(gè)包含關(guān)于需要標(biāo)注的地名信息文件,即包含地名稱、地名坐標(biāo)等基本信息。本例中我們只創(chuàng)建一個(gè)示范性的地名信息數(shù)據(jù)文件,其格式為XML文件格式,內(nèi)容如下:
<?xml version="1.0" encoding="iso-8859-1" ?> <map> <r><n>大清湖</n><x>37</x><y>264</y></r> <r><n>環(huán)</n><x>154</x><y>67</y></r> <r><n>城</n><x>164</x><y>67</y></r> <r><n>西</n><x>175</x><y>69</y></r> <r><n>路</n><x>184</x><y>72</y></r> <r><n>環(huán)</n><x>289</x><y>101</y></r> <r><n>城</n><x>297</x><y>107</y></r> <r><n>東</n><x>309</x><y>114</y></r> <r><n>路</n><x>321</x><y>117</y></r> <r><n>中</n><x>231</x><y>95</y></r> <r><n>心</n><x>232</x><y>114</y></r> <r><n>南</n><x>233</x><y>135</y></r> <r><n>路</n><x>234</x><y>158</y></r> <r><n>中</n><x>229</x><y>18</y></r> <r><n>心</n><x>233</x><y>34</y></r> <r><n>北</n><x>235</x><y>47</y></r> <r><n>路</n><x>234</x><y>58</y></r> <r><n>★某某市政府</n><x>239</x><y>88</y></r> <r><n>●城中影劇院</n><x>271</x><y>84</y></r> <r><n>●新華書店</n><x>171</x><y>60</y></r> <r><n>城</n><x>92</x><y>87</y></r> <r><n>環(huán)</n><x>104</x><y>98</y></r> <r><n>一</n><x>121</x><y>110</y></r> <r><n>路</n><x>134</x><y>124</y></r> <r><n>大清湖旅游區(qū)</n><x>36</x><y>223</y></r> <r><n>▲百丈峰</n><x>124</x><y>30</y></r> <r><n>◎東城新村</n><x>340</x><y>158</y></r> <r><n>◎南城新村</n><x>287</x><y>189</y></r> <r><n>※新頎花園</n><x>292</x><y>70</y></r> <r><n>人民公園</n><x>144</x><y>42</y></r> <r><n>動(dòng)物園</n><x>140</x><y>105</y></r> <r><n>東城廣場</n><x>342</x><y>73</y></r> <r><n>※百天花園</n><x>92</x><y>55</y></r> <r><n>※花峰小區(qū)</n><x>346</x><y>189</y></r> <r><n>◎高名新村</n><x>375</x><y>146</y></r> <r><n>※風(fēng)臺(tái)花苑</n><x>210</x><y>185</y></r> <r><n>▌城中大廈</n><x>219</x><y>111</y></r> <r><n>▌佳好大樓</n><x>185</x><y>109</y></r> <r><n>▌天啟工業(yè)大廈</n><x>122</x><y>63</y></r> <r><n>▌晨光商貿(mào)大廈</n><x>265</x><y>62</y></r> <r><n>▌華僑電子大廈</n><x>209</x><y>84</y></r> <r><n>▌佳好商城</n><x>196</x><y>49</y></r> </map>
注:其中<n>與</n>項(xiàng)為地名名稱;<x>122</x>與<y>63</y>項(xiàng)為地名標(biāo)注的X軸與Y軸坐標(biāo),至于其坐標(biāo)值的得來將在以后的實(shí)例中詳細(xì)講解。
2、Flash調(diào)用的代碼
打開Flash Professional,在上一講中的地圖底圖所在層的時(shí)間軸上,再補(bǔ)入以下Actionscript代碼:
var road_xml:XML = new XML(); //建立XML對象 road_xml.ignoreWhite = true; //忽略空格: road_xml.onLoad = function (success:Boolean):Void { if (success) { //如果調(diào)用成功 var childItems:Array = road_xml.firstChild.childNodes; //定義數(shù)據(jù)組 var f=0; //定義MC深度的變量 for (var i:Number = 0; i <childItems.length; i++) { var x=childItems[i].childNodes[1].childNodes[0].nodeValue //獲取X坐標(biāo)值 var y=childItems[i].childNodes[2].childNodes[0].nodeValue //獲取Y坐標(biāo)值 _root.map_mc.bzmap_mc.createTextField("road"+i, f, x, y, 1, 1); //創(chuàng)建地名文本 p=eval("road"+i); //將文本框變量的名稱賦給p p.autoSize = "left"; //指定文本的對齊方式 p.text = childItems[i].childNodes[0].childNodes[0].nodeValue ; //獲取地名名稱 f=f+1; //MC深度自動(dòng)加1 } } } road_xml.load("road.xml"); //調(diào)用XML文件:
注:其中XML文件的路徑使用了相對路徑,此路徑是XML文件相對于調(diào)用Flash文件的網(wǎng)頁文件的路徑,即在本例中,調(diào)用Flash地圖文件的網(wǎng)頁文件必須與Road.xml文件置于相同的路徑下,否則Flash將無法調(diào)用XML文件。
發(fā)布后,效果如下:
調(diào)用外部XML文件加注地名
這樣,F(xiàn)lash文件只提供電子地圖的基本構(gòu)架,由外部的road.xml文件提供地名標(biāo)注信息,如對地名進(jìn)行刪減、增加、糾錯(cuò)等操作時(shí),只需要對XML文件進(jìn)行相應(yīng)的更改就可以了,而Flash文件不需要做任何的改動(dòng)。這樣就大大減小了維護(hù)、更新的工作量。
以上就是Flash調(diào)用外部XML文件的基本步驟;當(dāng)然我們在本例中調(diào)用是已經(jīng)編輯好的XML數(shù)據(jù)文件,而獲取海量地名在地圖上的坐標(biāo)值也同樣可以在Flash環(huán)境中獲得。(責(zé)編:MAY)
{{item.content}}