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

时间:2018-05-29 23:27:15

标签: javascript if-statement boolean conditional

我有这样的功能:

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为真,我会检查另一个函数,如果是,请给用户一些金币。问题在于,当条件成立时,玩家将继续获得无穷无尽的金币,除非他离开那个位置并且条件不再正确。

现在我怎么能做到这一点,即使用户一直站在一个位置并且条件一直都是真的,他也不会继续获得金牌而且该功能只会执行一次,无论如何条件是真的吗?

我不想在条件为真的情况下一直将+=1添加到goldAmount,只需要一次。是否有可能在一次运行后退出它或类似的东西?

1 个答案:

答案 0 :(得分:1)

如果您不想修改原始阵列,可以将信息存储在其他位置。如果它只在一个函数中使用,我只是将它存储在函数本身上。由于您正在使用基元,因此您可以轻松地将其展平为单个键,并与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;

}

或者,您可以拥有一个三维数组。