3

下面的代码应该用空格替换 tilemap 索引,但是没有任何反应。

瓷砖地图:

var tilemap = [

     "wwwwwwwwwwwwwwww",
     "wmmmmmmmmmmmmmmw",
     "wmwmwmwwwwmwmwmw",
     "wmmbwmmmmmmwbmmw",
     "wmwwwwwwwwwwwwmw",
     "wmwmmmmssmmmmwmw",
     " mwmwwwsswwwmwm ",
     "wmwmwwwwwwwwmwmw",
     " mwmwmmmmmmwmwm ",
     "wmwmwmwwwwmwmwmw",
     "wmwmmmmmmmmmmwmw",
     "wmwmwwwwwwwwmwmw",
     "wmwmwbmmmmbwmwmw",
     "wmwmwmwwwwmwmwmw",
     "wmmmmmmmmmmmmmmw",
     "wwwwwwwwwwwwwwww",];

更改 tilmap 的代码:

if (Player.x > j*25 && 
Player.x < j*25+25 && 
Player.y > i*25 && 
Player.y < i*25+25
) {
   tilemap[i][j] = ' ';
}

奇怪的是,如果它是 tilemap[i] 甚至是 tilemap[j] 而不是 tilemap[i][j],它会做你认为它会做的事情,并且 tilemap[i][j] 用于遍历 tilemap在它所在的循环中。换句话说,这会改变瓦片地图中的整行:

if (Player.x > j*25 &&
    Player.x < j*25+25 &&
    Player.y > i*25 &&
    Player.y < i*25+25
) {
   tilemap[i] = ' ';
}
4

1 回答 1

1

tilemap是一维数组,每个字符串包含 16 个字符。语法上,字符串接受数组表示法来查找其中的字符,使其stringgVar[i]等效于stringVar.charAt(i)这解释了为什么在读取数组时,tilemap[i][j]返回保存的第 i 个字符串中的第 j 个字符tilemap而不会引发错误。

现在你遇到了我以前从未见过的东西。

如果您将某些内容分配给tilemap[i][j]javascript,则从 tilemap 数组中获取第 i 个字符串,将其视为可以添加属性的String 对象j,并添加一个属性,该属性的值和属性值在分配的 RHS 中指定.

但是,如果您尝试在分配后读回它,则用于读取的数组语法优先,您只会得到第 i 个字符串的第 j 个字符。

感谢你的提问。惊人的!


免费更新:您不能更新原始字符串对象中的字符,您只能使用它的值或它的部分值来组成一个新的字符串。查看使用String方法substrsubstring实现您想要做的事情。(更新时需要替换完整的字符串条目tilemap。)

于 2015-10-18T23:33:11.293 回答