2009年1月17日

XML新手上路3之FLASH載入篇

如何使用FLASH載入XML

  1. stop();
  2. var my_xml:XML = new XML();
  3. //宣告my_xml變數,型別:XML
  4. var xml_url:String = "xml_data.xml";
  5. //外部載入路徑,型別:字串
  6. my_xml.ignoreWhite = true;
  7. //忽略xml裡的空白字元
  8. //這個屬性,一定要開啟為true
  9. /*
  10. 例:


  11. 結構是不一樣的,因為多了空白,FLASH會認為是一個結點,所以要忽略
  12. */
  13. my_xml.onLoad = function(success:Boolean):Void
  14. {
  15. //當XML載入成功或失敗時,會執行這個function
  16. //後方要接一個變數,我們取名為success,型別:布林值
  17. //如果載入成功,success就為ture,失敗為false
  18. if (success) {
  19. //載入成功後,開始播放
  20. play();
  21. }
  22. };
  23. my_xml.load(xml_url);
  24. //開始載入

我們以下方的 xml來練習




01.jpg
2008/03/24



02.jpg
2008/03/25



03.jpg
2008/03/26


此XML,把值都寫在nodeValue裡
我們先在場景上放一個Button
取實體名稱為:_mc0
在第二個影格寫上程式
_mc0.onRelease=function(){
trace("第一筆item,label結點值為:"+my_xml.firstChild.firstChild.firstChild.firstChild.nodeValue)
trace("第一筆item,imgURL結點值為:"+my_xml.firstChild.firstChild.childNodes[1].firstChild.nodeValue)
trace("第一筆item,date結點值為:"+my_xml.firstChild.firstChild.childNodes[1].firstChild.nodeValue)
}
這樣就可以得到第一筆item裡的結點值
你可以練習看看如何得到第二筆的結點值
________________我是分隔線__________________

來練習一個簡單的XML相本
一樣使用上方的 xml檔
場景上有二個button,分別為上一張和下一張
放二個動態文字,來顯示label和date
再放一個空白的MovieClip,用來動態載入圖片

當按上一張時,就載入上一張照片
下一張,就載入下一張照片
如果已經是第一張,就保持在一張
如果是最後一張,就保持在最後一張
(怎麼感覺像在把程式碼用中文打出來)
這時候我們需要一個變數,來當索引值
var index:Number = 0
取名為index,初始值為0(一進來時,會先播放第一張,因為XML的第一筆索引值是0,不是1喔)


  1. stop();
  2. var index:Number = 0;
  3. //索印值
  4. var len:Number = my_xml.firstChild.childNodes.length;
  5. //xml裡照片數量
  6. function moveIndex(__num:Number):Void
  7. {
  8. //此function,用來處理index的值,加上判斷,避免產生Error
  9. index += __num;
  10. // index += __num可以寫成 index = index + __num,二者寫法一樣。
  11. if (index <>
  12. index = 0;
  13. //如果索引值小於0,就保持在0,也就是第一張
  14. } else if (index > len - 1) {
  15. index = len - 1;
  16. //如果索引值大於長度扣一,就保持在最後一張
  17. //為什麼要扣一,
  18. //假設xml裡有三筆item,透過length屬性,得到的值會是3
  19. //但索引值最大只能是2,因為沒有childNodes[3]這筆資料,所以要扣一
  20. }
  21. trace('目前的index值為:' + index);
  22. //設定,將xml裡的值,放到我們指定的地方
  23. label_txt.text = my_xml.firstChild.childNodes[index].childNodes[0].firstChild.nodeValue;
  24. //將得到的值,寫到我們指定的物件屬性,原本我們在childNodes都是寫數字,現在換成變數index
  25. load_mc.loadMovie(my_xml.firstChild.childNodes[index].childNodes[1].firstChild.nodeValue);
  26. date_txt.text = my_xml.firstChild.childNodes[index].childNodes[2].firstChild.nodeValue;
  27. }
  28. prev_mc.onRelease = function():Void
  29. {
  30. moveIndex(-1);
  31. //執行moveIndex,並把參數-1帶進去
  32. };
  33. next_mc.onRelease = function():Void
  34. {
  35. moveIndex(1);
  36. //執行moveIndex,並把參數-1帶進去
  37. };
  38. moveIndex(0);