当totalbrick==0时,JavaScript重新绘制块

当totalbrick==0时,JavaScript重新绘制块,javascript,function,2d-games,Javascript,Function,2d Games,我对Stackoverflow和JS都是新手。 我有一个来自我的编码课程的作业,我选择在JS中创建游戏。目前,我只使用JS创建了一个简单的突破游戏。 我现在的问题是,我希望比赛有点没完没了,所以当球与所有砖块碰撞时,砖块将被重新绘制,但分数将保持不变。我试着做点什么,一个是: function redrawBricks(){ if(brickColumnCount * brickRowCount < 1){ for(var c=0; c<brickColumnCount; c

我对Stackoverflow和JS都是新手。 我有一个来自我的编码课程的作业,我选择在JS中创建游戏。目前,我只使用JS创建了一个简单的突破游戏。 我现在的问题是,我希望比赛有点没完没了,所以当球与所有砖块碰撞时,砖块将被重新绘制,但分数将保持不变。我试着做点什么,一个是:

function redrawBricks(){
  if(brickColumnCount * brickRowCount < 1){
  for(var c=0; c<brickColumnCount; c++){
    for(var r=0; r<brickRowCount; r++){
      if(bricks[c][r].status == 1){
      var brickX = (c*(brickWidth+brickPadding)+brickOffsetleft);
      var brickY = (r*(brickHight+brickPadding)+brickOffsetTop);
      bricks[c][r].x = brickX;
      bricks[c][r].y = brickY;
      ctx.beginPath();
      ctx.rect(brickX, brickY, brickWidth, brickHight);
      ctx.fillStyle = "red";
      ctx.fill();
      ctx.closePath;
        }
      }
    }
  }
}
函数重画砖(){
if(砖柱计数*砖柱计数<1){

对于(var c=0;c查看链接中的代码,我可以看到您在与砖块碰撞时将状态设置为0。这意味着它不会被渲染。 在这个代码设计中,一个解决方案是检查所有brick.status何时都为0,然后将它们设置回1

函数loop2DArray(arr、rows、cols、cb){
for(设c=0;c{
如果(brick.status==1){
砖块++;
var brickX=(c*(brickWidth+brickPadding)+brickOffsetleft);
var brickY=(r*(brickHight+brickPadding)+brickOffsetTop);
砖[c][r].x=砖x;
砖[c][r].y=砖;
ctx.beginPath();
ctx.rect(砖砌、砖砌、砖砌宽度、砖砌宽度);
ctx.fillStyle=“红色”;
ctx.fill();
ctx.closePath;
}
});
//如果所有砖块都消失了,请重新创建所有砖块
如果(砖块剩余===0){
loop2DArray(bricks、brickRowCount、brickColumnCount、brick=>{
brick.status=1;
});
}

}
查看链接中的代码,我可以看到您在与砖块碰撞时将状态设置为0。这意味着它不会被渲染。 在这个代码设计中,一个解决方案是检查所有brick.status何时都为0,然后将它们设置回1

函数loop2DArray(arr、rows、cols、cb){
for(设c=0;c{
如果(brick.status==1){
砖块++;
var brickX=(c*(brickWidth+brickPadding)+brickOffsetleft);
var brickY=(r*(brickHight+brickPadding)+brickOffsetTop);
砖[c][r].x=砖x;
砖[c][r].y=砖;
ctx.beginPath();
ctx.rect(砖砌、砖砌、砖砌宽度、砖砌宽度);
ctx.fillStyle=“红色”;
ctx.fill();
ctx.closePath;
}
});
//如果所有砖块都消失了,请重新创建所有砖块
如果(砖块剩余===0){
loop2DArray(bricks、brickRowCount、brickColumnCount、brick=>{
brick.status=1;
});
}

}
欢迎使用堆栈溢出和JavaScript:)控制台中是否有错误?多亏了浏览器的开发人员工具,您才可以打开控制台。当砖块被击中时,您将其状态设置为0。因此,在碰撞中,您希望循环所有砖块以检查它们是否都具有0的状态。如果存在,则循环所有砖块以将其状态设置回1。虽然这是大量循环,但可能re是一种更好的数据结构,您可以使用它使代码设计更好。例如,您可以存储一个平面数组,其中包含砖的x,y坐标的对象,然后您可以运行单个循环,而不是嵌套循环。欢迎使用堆栈溢出和JavaScript:)控制台中有错误吗?谢谢,您可以打开它到浏览器的开发人员工具。当点击砖块时,您将其状态设置为0。因此,在“碰撞”中,您希望循环所有砖块以检查它们是否都具有0的状态。如果它们都具有0的状态,则循环所有砖块以将其状态设置回1。虽然这是大量循环,但可能有更好的数据结构可以使用,从而使e代码设计更好。例如,你可以存储一个平面数组,其中包含以x,y坐标表示砖块的对象,然后你可以运行一个循环,而不是嵌套循环。谢谢你,我会看看我是否能弄明白xDOk,所以我开始研究你的代码,但我没有得到第一个,你可以解释一下,这意味着什么n键入loop2DArray(arr(array?),rows,cols,cb(?),然后再次键入同一函数中的最后一个,cb(arr[c][r])我刚刚编辑了代码,因为我犯了一个错误,
bricksraining
应该已经初始化为0。现在应该可以正常工作了。loop2DArray函数可以在不需要重复代码的情况下循环行和列。
cb
是您传入的“回调函数”。它提供了brick,因此您可以可以使用/操作数组中的任何砖块。因此,在第一个实例中,它与您的代码示例相同,只是它为每个活动砖块的剩余砖块添加了1。第二个实例中,它将每个砖块的brick.status设置为1,以便它们在所有砖块都已死亡后仍然活着。谢谢,它起到了作用。我必须从var bricksX删除到ctx.close path,然后在插入原始函数来绘制砖块,然后它工作了xD谢谢xD谢谢,我会看看我是否能想出一些东西xDOk,所以我开始研究你的代码,但我没有得到第一个,你能解释一下,当你键入loop2DArray(arr(array?),rows,cols,cb(?)时,它意味着什么吗然后是同一函数中的最后一个,cb(arr[c][r])我刚刚编辑了代码,因为我犯了一个错误,
bricksraining
应该已经初始化为0。现在应该可以正常工作了。loop2DArray函数可以在不需要重复代码的情况下循环行和列。
cb
是您传入的“回调函数”。它提供了brick,因此您可以可以使用/操作数组中的任何砖块。因此,在第一个实例中,它与您的代码示例相同,只是它为每个活动砖块的剩余砖块添加了1。第二个实例中,它将每个砖块的brick.status设置为1,以便它们在所有砖块都已死亡后仍然活着。谢谢,它成功了。I h