javascript - js游戏卡住但没有错误

标签 javascript html html5-canvas

我正在开发一个涉及 build 、破坏和生存的 JavaScript 游戏。 它一直工作正常,但在添加树木后,游戏会在破坏方 block 后随机卡住。 代码在这里:

for (var bl in blocks) {
           if (mouse.x >= blocks[bl].x-camera.x && mouse.y >= camera.y+blocks[bl].y && mouse.x <= blocks[bl].x-camera.x+64 && mouse.y <= camera.y+blocks[bl].y+64) {
                document.body.style.cursor = "pointer";
                if (mouse.down) {
                     if (!blocks[bl].d && blocks[bl].d !== 0) {
                          blocks[bl].d = 32;
                     } else if (blocks[bl].d > 0) {
                          blocks[bl].d -= 0.5;
                          if (tools[player.tool].n === 'axe') {
                               blocks[bl].d -= 1;
                          }
                     } else {
                          var fb = false;
                          for (var i in inventory) {
                               if (inventory[i].n === blocks[bl].n) {
                                    inventory[i].a ++;
                                    fb = true;
                               }
                          }
                          if (!fb) {
                               inventory.push({n: blocks[bl].n, a: 1});
                          }
                          blocks.splice(bl, 1);
                     }
                }
           }
      }

我看不出有任何可能存在无限循环,并且发生时不会出现任何错误。

编辑

我将代码更改为

          var spliceblock = {bl: 0, s: false};
          for (var bl in blocks) {
               if (mouse.x >= blocks[bl].x-camera.x && mouse.y >= camera.y+blocks[bl].y && mouse.x <= blocks[bl].x-camera.x+64 && mouse.y <= camera.y+blocks[bl].y+64) {
                    document.body.style.cursor = "pointer";
                    if (mouse.down) {
                         if (!blocks[bl].d && blocks[bl].d !== 0) {
                              blocks[bl].d = 32;
                         } else if (blocks[bl].d > 0) {
                              blocks[bl].d -= 0.5;
                              if (tools[player.tool].n === 'axe') {
                                   blocks[bl].d -= 1;
                              }
                         } else {
                              var fb = false;
                              for (var i in inventory) {
                                   if (inventory[i].n === blocks[bl].n) {
                                        inventory[i].a ++;
                                        fb = true;
                                   }
                              }
                              if (!fb) {
                                   inventory.push({n: blocks[bl].n, a: 1});
                              }
                              spliceblock.s = true;
                              spliceblock.bl = bl;
                              //blocks.splice(bl, 1);
                         }
                    }
               }
          }
          if (spliceblock.s) {
               blocks.splice(spliceblock.bl, 1);
          }

但在尝试打破方 block 时它仍然会随机卡住。

最佳答案

在迭代数组时修改数组(使用拼接)必然会导致问题。如果您从数组中删除 block bl,然后继续运行它,计数器可能会关闭。

相反,存储要删除的 block 的索引,然后在循环完 block 后将其删除。

关于javascript - js游戏卡住但没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38467897/

相关文章:

javascript - Internet Explorer 9 有时会在 Canvas 上绘制空白图像

javascript - 如何在 v4 中的 d3.js 中拖动时设置原点

javascript - 单击时更改 SVG 填充覆盖 - jQuery

Javascript:在类内分配onclick

jquery - Bootstrap 模态对话框未打开

javascript - 无法获取 Canvas 的上下文

javascript - 多个 og :image tags not being displayed by share dialog or update status box

Javascript正则表达式,替换除数字之外的所有字符

html - 通过使用 javascript 在类中添加一个词来单击按钮时为菜单添加/删除 [toggle]

javascript - 用文本在 Canvas 上注释图像