1

我在 Flash 中制作了一个简单的关卡编辑器(使用 AS3),我使用一个二维数组值在屏幕上放置正方形。

假设我有这个数组(非常简单的例子):

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

(其中 0 代表什么都没有,1 代表一个正方形)

我如何将该数组存储在 XML 文件中,以便游戏可以从 XML 文件中读取该信息?

我是一个完全使用 XML 的菜鸟(从未使用过它)。

任何帮助,将不胜感激。

提前致谢,

佐龙19

4

2 回答 2

1

对于如此简单的事情,使用 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.
    //
}
于 2013-08-19T02:48:34.980 回答
0

这是一个简单的例子

名为levels.xml的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
}

hero 是一个关于 as3 as3 xml 示例中关于 xml 的一些简单示例的链接

于 2013-08-19T02:39:49.247 回答