我正在使用此代码:
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 为什么我没有收到跟踪声明?它只是不起作用
答案 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)语法,了解这将对您有所帮助。
我谈谈你的问题。见下文。
dataList = xmlData.Tiles.tile;
错误,因为xml没有Tiles
个节点。
查看xml,tile
节点仅以此语法访问:xmlData.layer.data.tile
。但是,你有一个两个tile节点,所以xmlData.layer.data.tile返回数组。所以第一个tile节点是xmlData.layer.data.tile [0],第二个tile节点是xmlData.layer.data.tile [1]。
tile
个节点没有任何x
,y
,tx
属性。只有一个object
节点。但是tx
并没有出现。
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/