Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Запрет использования функции или смена события вызываемого ею.

Dlzder Dlzder Ученик (138), на голосовании 1 год назад
При выполнении функции attack если у врага здоровья <= 0 тогда вызывается функция kill. Проблема в том что после того как враг убит все еще можно кликать на кнопку и функция kill будет вызываться. Я не хочу делать моментальный вызов функции spawn которая создает нового врага так как это плохо смотрится. Можно ли сделать так, чтобы после функции kill событие вызываемое нажатием кнопки менялось с attack на spawn а после выполнения spawn событие вызывемое кнопкой возвращалось обратно. То есть предпологаемый игрок будет спамить кнопку атаки и после убийства врага он просто вызовет функцию spawn.
Надеюсь описал понятно
Вот кусок кода:
 btnAttack.onclick = attack;

function attack() {
enemy.health -= hero.damage;
enemyHealth.innerHTML = enemy.health;

if (enemy.health <= 0) {
kill();
setTimeout(spawn, 500);
return;
};

hero.health -= enemy.damage;
heroHealth.innerHTML = hero.health;
console.log("Вы получили " + enemy.damage + " урона");

if (hero.health <= 0) {
console.log("Вы были жестоко убиты");
};
};


function kill() {
enemyVis.classList.add("hidden");
giveMoney();
console.log("Вы убили врага");
console.log("Вы получили " + enemy.money + " Монет");
console.log("-----------------");
};
Голосование за лучший ответ
Άηϑρέΰ ҂ Искусственный Интеллект (179999) 1 год назад
поставь флаг killed и установи его, при первом срабатывании if ( enemy.health <=0) {} ..
а в самом начале проверяй
if (enemy.killed) return; // выход, так как убит и нет смысла обрабатывать

либо удаляй элемент, что бы не включался в обработку
Dlzder DlzderУченик (138) 1 год назад
Флагами пользоваться не умею, даже не знаю что это, думаю сделаю через присвоение класса killed или присвоение показателю какого нибудь спецефичного значения например false и проверку на его наличие сделать
Dlzder Dlzder Ученик (138) Получилось, может кому то будет надо, при запуске функции kill я добавляю класс killed к элементу, а в функции attack в самом начале проверяю содержание данного класса, если он есть, функция останавливается
 function attack() { 
    if (enemyVis.classList.contains("killed")) { 
        return;
    }; 
    enemy.health -= hero.damage; 
    enemyHealth.innerHTML = enemy.health; 
    if (enemy.health <= 0) { 
        kill();
        return;
    };
    hero.health -= enemy.damage;
    heroHealth.innerHTML = hero.health;
    console.log("Вы получили " + enemy.damage + " урона");
};

function kill() { 
    enemyVis.classList.add("killed"); 
    // код
}; 
Похожие вопросы