无法正确更改 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 方法 substr
或 substring
来实现你想做的事情。 (更新时需要替换 tilemap
中的完整字符串条目。)
以下代码应将 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 方法
substr
或 substring
来实现你想做的事情。 (更新时需要替换 tilemap
中的完整字符串条目。)