ZBLOG

onClick_btnAutoAddItem(){ let tarPlayer = 0; if (this["playerImg1"].active && this["playerImg2"].active) { tarPlayer = Math.ceil(Math.random() * 3) - 1 }else if (this["playerImg1"].active) { tarPlaye...

在你提供的代码中,有一个问题可能导致循环内移除节点出现问题。问题在于当移除节点后,循环继续执行,但是此时i并未更新,可能会导致索引越界或其他错误。

为了解决这个问题,你可以使用break关键字来跳出当前循环,避免继续执行后续代码。在 autoAddItemToPlayer() 函数中添加一个布尔变量来判断是否成功移除物品,并将其作为返回值传递给主循环函数 onClick_btnAutoAddItem()。如果成功移除物品,则在外部循环中直接使用 return 结束整个函数。

以下是修改后的代码示例:

onClick_btnAutoAddItem() {
  // ...

  let collectAll = false;
  for (let index = 0; index < 12; index++) {
    let children = this["shopBoard" + index].children;
    for (let i = children.length - 1; i >= 0; i--) {
      // ...

      if (containerId == nodeContainerId) {
        if (collectAll) {
          return;
        } else {
          // ...
          collectAll = this.autoAddItemToPlayer(tarPlayer, itemN);
          if (collectAll) {
            return; // 直接结束整个函数
          }
        }
      }
    }

  }
}

autoAddItemToPlayer(palyerTar, node) {
  // ...

  if (canSetPos != -1) {
    // ...

    tween(node)
      .to(0.3, { position: targetPos })
      .call(() => {
        // ...
        if (node.parent) {
          this.shopBoardTab[node.parent.name]--;
          this.shopBoardSingleUpdate(node.parent.name);
          itemTar.children[0].getChildByName("itemMask").active = false;
          node.removeFromParent();
          if (canSetPos == 2) {
            // ...
            return true; // 成功移除物品,返回true
          }
        }
      })
      .start();

  }

  return false; // 默认未成功移除物品,返回false
}

通过这样的修改,当成功移除物品后,会直接跳出主循环,并且不会继续执行剩余代码。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=17301

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?