Javascript 数组混乱
我正在尝试使用此代码显示我将拥有的级别Javascript 数组混乱,javascript,jquery,arrays,Javascript,Jquery,Arrays,我正在尝试使用此代码显示我将拥有的级别 levelArray[0] = ["player", "empty", "empty", "empty", "wall", "wall", "empty", "empty", "wall", "wall", "empty", "empty", "empty","empty", "empty", "empty", "empty", "wall", "empty", "wall", "wall", "wall", "wall", "em
levelArray[0] = ["player", "empty", "empty", "empty", "wall", "wall", "empty",
"empty", "wall", "wall", "empty", "empty", "empty","empty",
"empty", "empty", "empty", "wall", "empty", "wall", "wall",
"wall", "wall", "empty", "wall", "empty", "wall", "empty",
"box", "wall", "empty", "wall", "empty", "empty", "empty",
"empty", "empty", "empty", "wall", "wall", "wall", "empty",
"wall", "wall", "empty", "empty", "ghost", "wall","ghost"];
for(var i = 0; i < edge; i++)
{
for(var j = 0; j < edge; j++)
{
switch(levelArray[i])
{
case "empty": // empty location
ctx.drawImage(emptyTile, currentX, currentY);
break;
case "wall": // wall block
ctx.drawImage(wallTile, currentX, currentY);
break;
case "box": // box block
ctx.drawImage(boxTile, currentX, currentY);
break;
case "ghost": // enemy sprite
ctx.drawImage(ghostTile, currentX, currentY);
break;
case "player": // player sprite
ctx.drawImage(playerTile, currentX, currentY);
break;
}
currentX += elementEdge;
}
currentY += elementEdge;
}
你没有使用内部循环。我相信你想要这个:
switch(levelArray[i][j])
在中,该片段位于
setupCanvas
函数中,以levelArray
作为参数。由于调用setupCanvas
时没有传递任何内容,因此它被认为是未定义的。因此您将得到错误。从我所看到的,levelArray
没有声明或初始化,因此它没有类型。一个简单的var-levelArray=[]顶部的代码>应该可以解决您的问题
更新:
在这里尝试代码之后,看起来也没有在第二级数组中循环。因此,您还需要更改levelArray[i][j]
之后,我得到一个错误,没有定义edge
。因此,您在那里也有一些工作。尝试如下方式访问您的levelArray数组:
交换机(levelArray[0][i])
,因为如果i=0,这个levelArray[i]肯定会返回array,如果您放置了更多数组,那么其他情况下的i都会返回array 我想你是想做这样的事:
我使用常规数组,而不是多维数组(您实际上没有这样做),每执行一步,我都会重置currentX参数并增加currentY参数
var edge = 7, elementEdge=20;
var levelArray = ["player", "empty", "empty", "empty", "wall", "wall", "empty",
"empty", "wall", "wall", "empty", "empty", "empty","empty",
"empty", "empty", "empty", "wall", "empty", "wall", "wall",
"wall", "wall", "empty", "wall", "empty", "wall", "empty",
"box", "wall", "empty", "wall", "empty", "empty", "empty",
"empty", "empty", "empty", "wall", "wall", "wall", "empty",
"wall", "wall", "empty", "empty", "ghost", "wall","ghost"];
var currentX = 0, currentY = 0;
for (var i = 0; i < levelArray.length; i++) {
switch (levelArray[i]) {
// All your cases here...
}
currentX += elementEdge;
if (i % edge == 0) {
currentX = 0;
currentY += elementEdge;
}
}
var-edge=7,elementEdge=20;
var levelArray=[“玩家”、“空”、“空”、“墙”、“墙”、“空”,
“空”、“墙”、“墙”、“空”、“空”、“空”、“空”、“空”,
“空”、“空”、“空”、“墙”、“空”、“墙”、“墙”,
“墙”、“墙”、“空”、“墙”、“空”、“墙”、“空”,
“盒子”、“墙”、“空”、“墙”、“空”、“空”、“空”、“空”,
“空”、“空”、“空”、“墙”、“墙”、“墙”、“空”,
“墙”、“墙”、“空”、“空”、“鬼”、“墙”、“鬼”];
var currentX=0,currentY=0;
对于(var i=0;i
另一个答案可能是真正使用多维数组:
var levelArray = [["player", "empty", "empty", "empty", "wall", "wall", "empty"],
["empty", "wall", "wall", "empty", "empty", "empty","empty"],
["empty", "empty", "empty", "wall", "empty", "wall", "wall"],
["wall", "wall", "empty", "wall", "empty", "wall", "empty"],
["box", "wall", "empty", "wall", "empty", "empty", "empty"],
["empty", "empty", "empty", "wall", "wall", "wall", "empty"],
["wall", "wall", "empty", "empty", "ghost", "wall","ghost"]];
for(var i = 0; i < levelArray.length; i++)
{
for(var j = 0; j < levelArray[i].length; j++)
{
switch(levelArray[i][j])
{
case "empty": // empty location
ctx.drawImage(emptyTile, currentX, currentY);
break;
case "wall": // wall block
ctx.drawImage(wallTile, currentX, currentY);
break;
case "box": // box block
ctx.drawImage(boxTile, currentX, currentY);
break;
case "ghost": // enemy sprite
ctx.drawImage(ghostTile, currentX, currentY);
break;
case "player": // player sprite
ctx.drawImage(playerTile, currentX, currentY);
break;
}
currentX += elementEdge;
}
currentY += elementEdge;
}
}
var levelArray=[[“玩家”、“空”、“空”、“墙”、“墙”、“空”],
[“空”、“墙”、“墙”、“空”、“空”、“空”、“空”、“空”],
[“空”、“空”、“空”、“墙”、“空”、“墙”、“墙”],
[“墙”、“墙”、“空”、“墙”、“空”、“墙”、“空”],
[“盒子”、“墙”、“空”、“墙”、“空”、“空”、“空”、“空”],
[“空”、“空”、“空”、“墙”、“墙”、“墙”、“空”],
[“墙”、“墙”、“空”、“空”、“鬼”、“墙”、“鬼”];
对于(var i=0;i
我认为您需要一个多级数组(二维)
现在你可以像这样迭代
edge = Math.sqrt(levelArray.length)
var elemWidth = 20, elemHeight = 20;
for (var i=0; i<levelArray.length; i++) {
for (var j=0; j<levelArray[i].length; j++) {
switch(levelArray[i][j]) {
case "empty": ctx.drawImage(emptyTile, i*elemWidth, j*elemHeight); break;
case "wall": ctx.drawImage(wallTile, i*elemWidth, j*elemHeight); break;
case "box": ctx.drawImage(boxTile, i*elemWidth, j*elemHeight); break;
case "ghost": ctx.drawImage(ghostTile, i*elemWidth, j*elemHeight); break;
case "player": ctx.drawImage(playerTile, i*elemWidth, j*elemHeight); break;
}
}
}
var elemWidth=20,elemHeight=20;
for(var i=0;iisedge
在某个地方定义了?edge在哪里定义了?您在两个for循环中都使用它?它不应该是levelArray.length和levelArray[i]。length?levelArray[i]将永远不会等于字符串。使用edge Definition更新edge的值是什么?请尝试代替edge,48并删除两个for循环中的一个。确保已定义edge,并且levelArray已正确初始化(var levelArray=[])定义了Edge并正确定义了levelArray的地方initialised@Cody你能安装一个JSFIDLE来重现这个问题吗?@Cody这太多代码了,我现在无法调试。但是我运行了它,没有出现任何错误。单击输出,我只是把它全部扔进去,这样就可以正确地表示我所拥有的
var elemWidth = 20, elemHeight = 20;
for (var i=0; i<levelArray.length; i++) {
for (var j=0; j<levelArray[i].length; j++) {
switch(levelArray[i][j]) {
case "empty": ctx.drawImage(emptyTile, i*elemWidth, j*elemHeight); break;
case "wall": ctx.drawImage(wallTile, i*elemWidth, j*elemHeight); break;
case "box": ctx.drawImage(boxTile, i*elemWidth, j*elemHeight); break;
case "ghost": ctx.drawImage(ghostTile, i*elemWidth, j*elemHeight); break;
case "player": ctx.drawImage(playerTile, i*elemWidth, j*elemHeight); break;
}
}
}