AS3-如何在XML文件中存储和使用数组
我正在用Flash制作一个简单的关卡编辑器(使用AS3),我使用一个2D值数组在屏幕上放置正方形 假设我有一个数组(非常简单的示例): (其中0表示零,1表示正方形) 如何将该数组存储在XML文件中,以便游戏可以从XML文件中读取该信息 我完全不懂XML(从未使用过它) 任何帮助都将不胜感激 提前感谢,AS3-如何在XML文件中存储和使用数组,xml,actionscript-3,Xml,Actionscript 3,我正在用Flash制作一个简单的关卡编辑器(使用AS3),我使用一个2D值数组在屏幕上放置正方形 假设我有一个数组(非常简单的示例): (其中0表示零,1表示正方形) 如何将该数组存储在XML文件中,以便游戏可以从XML文件中读取该信息 我完全不懂XML(从未使用过它) 任何帮助都将不胜感激 提前感谢, Zoron19这里有一个简单的例子 在名为levels.xml的xml文件中,每一行都有一个id表示行号,值是一个字符串(如您所述) Hero是一个关于as3中xml的一些简单示例的链接 在名为
Zoron19这里有一个简单的例子 在名为levels.xml的xml文件中,每一行都有一个id表示行号,值是一个字符串(如您所述)
Hero是一个关于as3中xml的一些简单示例的链接 在名为levels.xml的xml文件中,每一行都有一个id表示行号,值是一个字符串(如您所述)
Hero是一个关于as3中xml的一些简单示例的链接,它非常简单,使用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
现在,我们可以使用此函数将其转换回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,可以非常轻松地针对
节点存储级别数据。假设您在一个名为levels.XML的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>
然后,loadLevel
功能可以获取数据并从中加载级别:
function loadLevel(sourceXML:XML, levelName:String):void
{
var levelData:Array = levelToArray(sourceXML.level.(@name == levelName));
trace(levelData);
// Work with the loaded data array.
//
}
对于如此简单的东西,使用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
现在,我们可以使用此函数将其转换回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,可以非常轻松地针对
节点存储级别数据。假设您在一个名为levels.XML的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>
然后,loadLevel
功能可以获取数据并从中加载级别:
function loadLevel(sourceXML:XML, levelName:String):void
{
var levelData:Array = levelToArray(sourceXML.level.(@name == levelName));
trace(levelData);
// Work with the loaded data array.
//
}
我理解所有这些是如何工作的,但是,我该如何将该字符串放入外部文件并将其加载回Flash?@Zoron19我将把它添加到我的答案中。级别信息是如何进入XML文件的?在加载数组之前,我需要知道如何将数组存储在XML文件中。@Zoron19通常是手动将其放入其中的。。。没有理由将少量数组数据存储到外部XML文件中,而只需要重新加载它,是吗?XML文件由您手动设置,因此数据不会直接存储到游戏本身中。只有在有大量级别数据且您不想预先加载所有数据时,才需要这样做。XML也可以由服务器端代码(如PHP)生成,方法是从数据库中提取级别并从中构建XML,这更高级。我将有一个单独的Flash程序作为关卡编辑器。所以我希望能够在游戏和编辑器之间共享阵列数据。很抱歉,我不太清楚。我知道所有这些是如何工作的,但是,我应该如何将该字符串放入外部文件并将其加载回Flash?@Zoron19我将把它添加到我的答案中。级别信息甚至是如何进入XML文件的?在加载数组之前,我需要知道如何将数组存储在XML文件中。@Zoron19通常是手动将其放入其中的。。。没有理由将少量数组数据存储到外部XML文件中,而只需要重新加载它,是吗?XML文件由您手动设置,因此数据不会直接存储到游戏本身中。只有在有大量级别数据且您不想预先加载所有数据时,才需要这样做。XML也可以由服务器端代码(如PHP)生成,方法是从数据库中提取级别并从中构建XML,这更高级。我将有一个单独的Flash程序作为关卡编辑器。所以我希望能够在游戏和编辑器之间共享阵列数据。很抱歉,我不清楚。为什么没有人包括如何在XML文件中存储数据?你告诉过我如何将XML加载到Flash中,但是数组是如何加载到XML中的呢?你应该制作一个工具来生成XML,我认为这并不难。工具可能是空气锉刀。查看此文档,希望它能有所帮助。为什么没有人介绍如何将数据存储在XML文件中?你告诉过我如何将XML加载到Flash中,但是数组是如何加载到XML中的呢?你应该制作一个工具来生成XML,我认为这并不难。工具可能是空气锉刀。看看这个文件,希望能有所帮助