对于如此简单的事情,使用 XML 将是一种浪费。
您可以轻松地将其存储为纯文本join()
,然后使用split()
将其转换回数组。这是一个将二维数组转换为字符串然后再转换回数组的示例。首先,我们有将您的数组转换为字符串以进行存储的函数:
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
现在我们可以使用这个函数将其转换回二维数组:
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.
//
}