我正在从Ogmo进行一些级别的负载解析,我遇到了一个问题。如果我只有一层,我可以这样读:
private function drawLayer(layer:String,xml:Class):void
{
var rawData:ByteArray = new xml;
var dataString:String = rawData.readUTFBytes(rawData.length);
var typeString:String = "LevelData." + layer + ".tile";
trace ("Type STring:" + typeString);
LevelData = new XML(dataString);
var dataList:XMLList;
var dataElement:XML;
dataList = LevelData.terrain.tile;
//trace ("dataList: " + dataList);
for each(dataElement in dataList)
{ tIndex = (int(dataElement.@tx) / 32) + ((int(dataElement.@ty) / 32) * 9);
//trace("tIndex is: " + tIndex);
_tiles.setTile(int(dataElement.@x) / 32, int(dataElement.@y / 32), tIndex);
}
LevelData.terrain.tile是XML解析字符串。但是,我有一些不同的层,我希望能够动态解析,即:
dataList = typeString;
但这不起作用。但它试图从XML中解析typeString,而不是“typeString”字符串。我无法看到一种方法来做我想做的事情,但我想如果有人知道某种方式,他们就会在StackOverflow上。
提前致谢!
答案 0 :(得分:0)
你可以尝试:
dataList = LevelData[layer].tile;
提示:不要对变量使用大写名称;通常那些与类名一起使用。如果你把它们混合起来,你的代码可能会让人感到困惑。
答案 1 :(得分:0)
我假设您的xml具有以下结构:
<level>
<layer>
<terrain>
<tile/>
</terrain>
...
</layer>
</level>
根据您的方法标题,我假设您希望动态访问第0层图块或第n层图块。您可以通过以下方式使用E4X:
var tiles:XMLList = levelData.layer[index]..tile;
如果您将每个图层的关联作为属性:
<layer index="0"/>
以上陈述可能成为:
var tiles:XMLList = levelData.layer.(@index == 0)..tile;
“...”表达式可以替换为tile标记的完整路径。
Senocular有一个很棒的E4X页面:
http://www.senocular.com/flash/tutorials/as3withflashcs3/?page=4
答案 2 :(得分:0)
我不太确定这种格式是否有什么
"LevelData."
将在actionscript中为你工作。始终将对象视为字典。
LevelData["something"]