2013-08-19 69 views
1

我在Flash中使用AS3創建簡單的關卡編輯器,並使用二維數組值來在屏幕上放置正方形。AS3 - 如何在XML文件中存儲和使用數組

可以說我有這個陣列(真正簡單的例子):

var level1:Array = new Array[[0, 0, 0, 0, 0], [1, 1, 1, 1, 1]]; 

(其中0表示沒有,1代表一個正方形)

如何將數組存儲在XML文件中,這樣那麼遊戲可以從XML文件中讀取這些信息?

我是一個XML的完整noob(從來沒有使用它)。

任何幫助,將不勝感激。

由於提前,

Zoron19

回答

0

下面是一個簡單的例子

的xml文件名爲levels.xml,每行有一個ID顯示的行數,和值是一個字符串(如你所提到的)

<?xml version="1.0" encoding="UTF-8"?> 

<levels> 
    <row id="1">0,0,0,0,0</row> 
    <row id="2">1,1,1,1,1</row> 
</levels> 

加載XML並獲得價值

var xmlPath:String = "levels.xml"; 
var loader:URLLoader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, onLoadComplete); 
loader.load(new URLRequest(xmlPath)); 


protected function onLoadComplete(event:Event):void { 
    var xml:XML = XML(event.target.data); 

    var nodes:String = String(xml.row.(@id == 1));//nodes value is 0,0,0,0,0 
} 

英雄是關於關於XML的一些簡單的例子在AS3 as3 xml example

+0

爲什麼沒有人包括如何將數據存儲在XML文件中?您已經告訴我如何將XML加載到Flash中,但Array如何進入XML? – Zoron19

+0

你應該製作一個工具來生成XML,我認爲這並不難。該工具可以是空氣檔案。看看這個文檔,希望它幫助http://www.adobe.com/cn/devnet/air/flex/quickstart/articles/xml_prefs.html – Pan

1

一個鏈接,東西這麼簡單,它是使用XML的浪費。

您可以使用join()將其作爲純文本輕鬆存儲,然後使用split()將其轉換回數組。以下是將2D數組轉換爲字符串然後返回到數組的示例。首先,我們必須將你的數組轉換成字符串存儲功能:使用您的級別的數據

function levelToString(input:Array):String 
{ 
    var output:Array = []; 
    for each(var i:Array in input) 
    { 
     output.push(i.join(",")); 
    } 

    return output.join("#"); 
} 

和示例:

var level:Array = [[0, 0, 0, 0, 0], [1, 1, 1, 1, 1]]; 
trace(levelToString(level)); // 0,0,0,0,0#1,1,1,1,1 

現在我們可以使用此功能將其轉換回2D陣列:

function levelToArray(input:String):Array 
{ 
    var base:Array = input.split("#"); 
    var output:Array = []; 

    for each(var i:String in base) 
    { 
     output.push(i.split(",")); 
    } 

    return output; 
} 

和示例使用我們上面得到的字符串:

var array:Array = levelToArray("0,0,0,0,0#1,1,1,1,1"); 
trace(array[0]); // 0,0,0,0 
trace(array[1]); // 1,1,1,1 

使用這種方法,您的數據要小得多。

現在來存儲和加載該數據。如果你想使用XML,你可以很容易地將水平數據存儲在<level>節點上。說你有這個XML文件名爲levels.xml

<levels> 
    <level name="first">0,0,0,0,0#1,1,1,1,1</level> 
    <level name="second">0,1,0,0,0#1,1,1,0,0</level> 
</levels> 

將這些數據加載到遊戲中,你將需要使用URLLoader

var req:URLRequest = new URLRequest("levels.xml"); 
var loader:URLLoader = new URLLoader(req); 
loader.addEventListener(Event.COMPLETE, dataLoaded); 

function dataLoaded(e:Event):void 
{ 
    var xml:XML = e.target.data as XML; 

    // Described below. 
    loadLevel(xml, "first"); 
} 

然後是loadLevel功能可以把數據並加載它的級別:

function loadLevel(sourceXML:XML, levelName:String):void 
{ 
    var levelData:Array = levelToArray(sourceXML.level.(@name == levelName)); 
    trace(levelData); 

    // Work with the loaded data array. 
    // 
} 
+0

我明白這是如何工作,但是,我將如何將該字符串一個外部文件,並將其加載回Flash? – Zoron19

+0

@ Zoron19我會將其添加到我的答案中。 – Marty

+0

級別信息如何進入XML文件?我需要知道如何將數組存儲在XML文件中,然後才能加載它。 – Zoron19