繁体   English   中英

条件满足时仅执行一次语句

[英]Execute if statement only once when conditional is met

我有一个像这样的功能:

function foundGold(ptX, ptY) {
  var gridX = Math.floor(ptX / 36);
  var gridY = Math.floor(ptY / 36);
  if(mapArray[gridY][gridX] == 3) {
    return true;
  }
}

if(foundGold(boatPosX + 36, boatPosY)) { goldAmount+= 1; gold.innerHTML = goldAmount; }

它检查我的游戏角色位置,以及它是否在数组的特定部分上踩踏,这意味着条件为真且该功能将继续运行。 因此,在这种情况下,我将检查另一个函数是否foundGold为true,如果是,则为用户提供一些黄金。 问题是,当条件为真时,玩家将不断获得无数的黄金,除非他退出该位置并且条件不再为真。

现在我该如何做,以便即使用户一直站在一个位置并且条件一直为真,他也不会继续获得黄金,并且该功能将只执行一次,无论条件多长时间为真?

我不希望在条件为true的情况下一直将+=1一直添加到goldAmount ,仅一次。 运行一次或类似的操作后是否可以退出它?

如果您不想修改原始数组,则可以将信息存储在其他位置。 如果仅在一个函数中使用它,则将其存储在函数本身中。 由于使用的是原语,因此可以轻松地将其与playerId组合为单个键:

function foundGold( ptX, ptY, playerId ) {

    const gridX = Math.floor( ptX / 36 );
    const gridY = Math.floor( ptY / 36 );

    if ( mapArray[ gridY ][ gridX ] === 3 ) {

        // Gold exists; check if player already found it
        const key = `_memory;${playerId};${gridX};${gridY}`;
        if ( this[ key ] ) return false;
        this[ key ] = true;

        return true;

    }

    return false;

}

或者,您可以具有3维数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM