操作脚本 3 - As3:XML 解析只是不想工作



我使用的是以下代码:

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为什么我没有收到跟踪声明?它就是不起作用

是否要访问<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返回数组。所以第一个瓦片节点是xmlData.layer.data.tile[0],而第二个瓦片节点则是xmlData.layer.data.tile[1].

  3. tile节点不具有任何xytx属性。只有一个CCD_ 10节点。但CCD_ 11没有出现。

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

E4X教程:

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

最新更新