Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在返回值时不中断函数/循环(Js)_Javascript_Arrays_2d - Fatal编程技术网

Javascript 如何在返回值时不中断函数/循环(Js)

Javascript 如何在返回值时不中断函数/循环(Js),javascript,arrays,2d,Javascript,Arrays,2d,嘿,所以我在做一个2D瓷砖游戏,或者说我只是在胡闹。我从一个数组中创建了贴图,其中0表示零,其他字符表示一个可行走的平铺 var map=[["t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t"], ["l","1","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","r"], ["l","

嘿,所以我在做一个2D瓷砖游戏,或者说我只是在胡闹。我从一个数组中创建了贴图,其中0表示零,其他字符表示一个可行走的平铺

var map=[["t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t","t"],
    ["l","1","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","r"],
    ["l","r","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","r"],
    ["l","1","t","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","l","r"],
    ["l","1","1","t","t","t","t","t","t","t","t","t","t","t","t","r","0","0","l","r"],
    ["l","b","b","b","b","b","b","b","b","1","1","b","b","b","b","b","t","t","b","r"],
    ["0","0","0","0","0","0","0","0","0","l","r","0","0","0","0","0","0","0","0","0"],
    ["0","0","0","0","0","0","0","0","0","l","r","0","0","0","0","0","0","0","0","0"],
    ["0","0","0","0","0","0","0","0","0","l","r","0","0","0","0","0","0","0","0","0"],
    ["0","0","0","0","0","0","0","0","l","1","1","r","0","0","0","0","0","0","0","0"],
    ["0","0","0","0","0","0","0","l","1","1","1","1","r","0","0","0","0","0","0","0"],
    ["t","t","t","t","t","t","t","1","1","1","1","1","1","t","t","t","t","t","t","t"]];

你也可以在这里看到我的可移动角色。 现在我已经走到了这一步,我希望我的角色与地图数组中表示为0的空平铺发生碰撞

这是我检查冲突的代码(脚本中括号是正确的):

功能冲突检查(ind){
用于(映射中的变量i){
对于(映射[i]中的变量j){
如果(yass==true){
if(map[i][j]==0){

如果(ind==0&&playerPosX==j*32+32&&playerPosY>i*32-32&&playerPosYi*32-32&&playerPosYj*32-32&&playerPosXj*32-32&&playerPosX您需要在第15行的主if/else块的最后一个else中使用
continue
而不是
return
。您走在正确的轨道上,您的循环只运行一次迭代,因为您总是重新执行但是,您应该只在知道最终结果时调用return,因为正如您所说的,它将退出函数

在检测到碰撞后立即调用“return false”是正确的,因为如果玩家与至少一个块碰撞,则存在碰撞。相反,只有在您确定整个棋盘上根本没有碰撞时,才应调用“return true”,并且您需要在使用c之前测试地图上的每个块一位专家证实了这一点

function collisioncheck(ind) {
    for (var i in map) {
        for (var j in map[i]) {
            if (yass == true) {
                if (map[i][j] == 0) {
                    if (ind == 0 && playerPosX == j * 32 + 32 && playerPosY > i * 32 - 32 && playerPosY < i * 32 + 32) {
                      return false;
                    } else if (ind == 1 && playerPosX == j * 32 - 32 && playerPosY > i * 32 - 32 && playerPosY < i * 32 + 32) {
                      return false;
                    } else if (ind == 2 && playerPosY == i * 32 + 32 && playerPosX > j * 32 - 32 && playerPosX < j * 32 + 32) {
                      return false;
                    } else if (ind == 3 && playerPosY == i * 32 - 32 && playerPosX > j * 32 - 32 && playerPosX < j * 32 + 32) {
                      return false;
                    } 
                    // else: do nothing. (i.e. let the loop run for the next block)
                }
            } else {
              return true;
            }
        }
    }
    return true;
}
功能冲突检查(ind){
用于(映射中的变量i){
对于(映射[i]中的变量j){
如果(yass==true){
if(map[i][j]==0){
如果(ind==0&&playerPosX==j*32+32&&playerPosY>i*32-32&&playerPosYi*32-32&&playerPosYj*32-32&&playerPosXj*32-32&&playerPosX

我们在这里要做的是遍历所有块,如果发现冲突,我们将返回false并退出函数。只有遍历所有块而未发现任何冲突,我们才能得到“return true”语句,这正是您想要的。

您可以
断开标签;
继续
,而不是使用
返回
,其中,
label
是for循环上的一个标签。感谢您澄清这一点!您的答案非常有意义,而且有效;)
function collisioncheck(ind) {
    for (var i in map) {
        for (var j in map[i]) {
            if (yass == true) {
                if (map[i][j] == 0) {
                    if (ind == 0 && playerPosX == j * 32 + 32 && playerPosY > i * 32 - 32 && playerPosY < i * 32 + 32) {
                      return false;
                    } else if (ind == 1 && playerPosX == j * 32 - 32 && playerPosY > i * 32 - 32 && playerPosY < i * 32 + 32) {
                      return false;
                    } else if (ind == 2 && playerPosY == i * 32 + 32 && playerPosX > j * 32 - 32 && playerPosX < j * 32 + 32) {
                      return false;
                    } else if (ind == 3 && playerPosY == i * 32 - 32 && playerPosX > j * 32 - 32 && playerPosX < j * 32 + 32) {
                      return false;
                    } 
                    // else: do nothing. (i.e. let the loop run for the next block)
                }
            } else {
              return true;
            }
        }
    }
    return true;
}