无法正确更改 Pacman Tilemap

Pacman Tilemap Cannot Be Correctly Changed

以下代码应将 tilemap 索引替换为空白 space,但没有任何反应。

瓷砖地图:

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]适用于在其所在的循环中遍历瓦片地图。换句话说,这会更改瓦片地图中的整行:

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

tilemap 是一维字符串数组,每个字符串包含 16 个字符。从句法上讲,字符串接受数组符号来查找其中的字符,使 stringgVar[i] 等同于 stringVar.charAt(i) 这解释了为什么在读取数组时,tilemap[i][j] returns 中的第 j 个字符我在 tilemap 中保存的字符串没有抛出错误。

现在你 运行 进入了我以前从未见过的东西。

如果你给 tilemap[i][j] 赋值 javascript 从 tilemap 数组中取出第 i 个字符串,将其视为 String 对象 可以向其添加属性,并添加一个 属性 ,其命名为 j 和 属性 值,如分配的 RHS 中指定的值。

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

感谢您的提问。惊人的!


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