Выполнение оператора if только один раз при выполнении условия - PullRequest
0 голосов
/ 30 мая 2018

У меня есть такая функция:

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 голосов
/ 30 мая 2018

Если вы не хотите изменять исходный массив, вы можете хранить информацию в другом месте.Если бы он использовался только в одной функции, я бы просто сохранил его в самой функции.Поскольку вы используете примитивы, вы можете легко сгладить его с помощью одной клавиши в сочетании с 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;

}

В качестве альтернативы, вы можете иметь трехмерный массив.

...