条件满足时只执行一次if语句
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;
}
它检查我的游戏角色位置,如果它踩到数组的特定部分,则意味着条件为真并且函数保持 运行ning。因此,在这种情况下,如果 foundGold
为真,我将检查另一个函数,如果为真,则给用户一些金币。问题是,当条件为真时,玩家将继续获得无穷无尽的金币,除非他离开那个位置并且条件不再为真。
现在我该如何做到这一点,即使用户一直站在一个地方并且条件一直为真,他也不会继续获得金币并且函数只会执行一次,无论如何条件是否成立?
我不想在条件为真时一直将 +=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 维数组。
我有这样的功能:
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;
}
它检查我的游戏角色位置,如果它踩到数组的特定部分,则意味着条件为真并且函数保持 运行ning。因此,在这种情况下,如果 foundGold
为真,我将检查另一个函数,如果为真,则给用户一些金币。问题是,当条件为真时,玩家将继续获得无穷无尽的金币,除非他离开那个位置并且条件不再为真。
现在我该如何做到这一点,即使用户一直站在一个地方并且条件一直为真,他也不会继续获得金币并且函数只会执行一次,无论如何条件是否成立?
我不想在条件为真时一直将 +=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 维数组。