我在Flash中制作了一个简单的关卡编辑器(使用AS3),并使用2D数组值在屏幕上放置方块。
假设我有这个数组(非常简单的例子):
var level1:Array = new Array[[0, 0, 0, 0, 0], [1, 1, 1, 1, 1]];
(其中0表示无,1表示正方形)
如何将该数组存储在XML文件中,以便游戏可以从XML文件中读取该信息?
我是一个完整的XML菜鸟(从未使用过它)。
任何帮助都将不胜感激。
提前致谢,
Zoron19
答案 0 :(得分: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>
节点上。假设您在名为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>
要将这些数据加载到游戏中,您需要使用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.
//
}
答案 1 :(得分: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 example
中关于xml的一些简单示例的链接