As3:XML解析只是不想工作

时间:2014-03-16 14:00:33

标签: xml actionscript-3 parsing tile

我正在使用此代码:

private function loadLevel(xml:Class):void
{
    var rawData:ByteArray = new xml;
    var dataString:String = rawData.readUTFBytes(rawData.length);
    var xmlData:XML = new XML(dataString);

    var dataList:XMLList;
    var dataElement:XML;

    dataList = xmlData.Tiles.tile;

    for each(dataElement in dataList)
    {
        trace("HI");
        _tiles.setTile(int(dataElement.@x) / 120, int(dataElement.@y) / 120, int(dataElement.@tx) / 120);
    }
}

但我没有任何痕迹!!

这是tmx文件:

<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" width="16" height="9" tilewidth="120"     tileheight="120">
 <tileset firstgid="1" name="u" tilewidth="120" tileheight="120">
  <image source="../assets/tileset1.png" width="360" height="120"/>
 </tileset>
 <layer name="Tiles" width="16" height="9">
  <data>
   <tile gid="2"/>
   <tile gid="2"/>
   blablabla repeat
  </data>
 </layer>
 <objectgroup name="Spawn" width="16" height="9">
  <object x="120" y="892" width="122" height="28"/>
  <object x="2222" y="-244"/>
 </objectgroup>
</map>

我遵循了本教程:https://www.youtube.com/watch?v=Ek0HLk6wBmQ 为什么我没有收到跟踪声明?它只是不起作用

1 个答案:

答案 0 :(得分:1)

您想要访问<layer name="Tiles" width="16" height="9">元素吗?

如果正确的话,试试这个

var xmlData:XML = new XML(dataString);

var name:String = xmlData.layer.@name;
var width:int = xmlData.layer.@width;
var height:int = xmlData.layer.@height;

如果你想访问这些元素

<tile gid="2"/>
<tile gid="2"/>

试试这个

for each(var element:XML in xmlData.layer.data.tile)
{
     trace(element.@gid);
}

如果要访问此元素。首先匹配与第二个节点相同的元素,添加宽度和高度属性。

<object x="120" y="892" width="122" height="28"/>
<object x="2222" y="-244" widht="200" height"400"/>

试试这个

for each(var element:XML in xmlData.objectgroup.object)
{
   trace("x: " + element.@x + " y: " + element.@y + " width: " + element.@width + " height: " + element.@height);
}

本教程是Actionscript 3.0 E4X(ECMA for XML)语法,了解这将对您有所帮助。


被修改

我谈谈你的问题。见下文。

  1. dataList = xmlData.Tiles.tile;错误,因为xml没有Tiles个节点。

  2. 查看xml,tile节点仅以此语法访问:xmlData.layer.data.tile。但是,你有一个两个tile节点,所以xmlData.layer.data.tile返回数组。所以第一个tile节点是xmlData.layer.data.tile [0],第二个tile节点是xmlData.layer.data.tile [1]。

  3. tile个节点没有任何xytx属性。只有一个object节点。但是tx并没有出现。

  4. p.s:您必须在视频中创建相同的xml ...教程算法基于视频中指定的xml。但是,我认为在解决这个问题之前。你必须了解AS3.0 E4X。

    E4X教程:

    http://code.tutsplus.com/tutorials/as3-101-xml-basix--active-2908 http://www.kirupa.com/developer/flashcs3/using_xml_as3_pg1.htm http://www.republicofcode.com/tutorials/flash/as3xml/