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;iis
edge
在某个地方定义了?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;
        }
    }
}