以下代码应使用空格替换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在它所在的循环中。换句话说,这将更改 slice map 中的整个行:
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]tilemap中保存的第i个字符串中返回第j个字符而不会引发错误。

现在,您遇到了我从未见过的东西。

如果您为tilemap[i][j]分配了某些内容,则javascript从tilemap数组中获取第i个字符串,将其视为可以添加属性的字符串对象,并添加一个名称为j的属性和属性值(如作业的RHS。

但是,如果您尝试在分配后重新读取它,则用于读取的数组语法将具有优先权,并且您仅会获得第i个字符串的第j个字符。

感谢你的提问。太棒了!

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

关于javascript - Pacman Tilemap无法正确更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33203685/

10-12 12:16