0

我正在开发一个 HTML5/Canvas 游戏引擎,但我被卡住了。引擎通过瓦片集绘制地图,并从 XML 文档中读取地图数据,如下所示:

<map>
    <layer id="-1">
        <row>0,0,0</row>
        <row>1,1,1</row>
        <row>0,0,0</row>
    </layer>

    <layer id="1">
        <row>0,0,0</row>
        <row>1,1,1</row>
        <row>0,0,0</row>
    </layer>
</map>

以及将数据加载到二维数组中的 JavaScript:

var layers = xml.getElementsByTagName("layer");
for(var i in layers)
{
    var rows = layers[i].childNodes;
    for(var j in rows)
    {
        array[i][j] = rows[j].nodeValue;
    }   
}

问题:返回的数据只是“null”、“”和“undefined”的混杂。此外,数组似乎比必要的要小,因为在我检查所有值之前,我检查了节点的数量(使用长度属性),它总是比实际的节点数量多。

4

1 回答 1

3
  1. 使用textContent而不是nodeValue. 前者返回正确的值,例如"0,0,0".
  2. 由于文本节点也是子节点,因此您应该跳过它们(检查节点的nodeType)。这些正在用孔填充您的阵列,并使它们比需要的更大。文本节点基本上是缩进的空白。解决这个问题需要一个额外的计数器。
  3. 使用普通for循环,而不是for in循环。

http://jsfiddle.net/DhKJr/

于 2012-05-19T21:06:19.493 回答