代码之家  ›  专栏  ›  技术社区  ›  Limpuls

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

  •  0
  • Limpuls  · 技术社区  · 6 年前

    我有一个这样的函数:

    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 回复  |  直到 6 年前
        1
  •  1
  •   vox    6 年前

    如果不想修改原始数组,可以将信息存储在其他位置。如果它只在一个函数中使用,我将把它存储在函数本身上。由于使用的是基本体,因此可以轻松地将其展平为单个关键点,并结合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;
    
    }
    

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