Только что запустил HTML, CSS, JS, и я делаю что-то похожее на cookie clicker, чтобы начать и учиться. Мой автоматический cps испорчен, и я не знаю почему

#javascript #if-statement

#javascript #if-statement

Вопрос:

https://WearableExaltedModes.benjaminsegger9.repl.co если вы отправите спам на тот, который стоит 100 долларов и дает 1 доллар в секунду, вы увидите проблему. Я новичок, и это, вероятно, действительно простая и очевидная ошибка, но я был бы очень благодарен за некоторую помощь. Похоже, что мои «если» по какой-то причине не работают.

JS скрипт.

 score = 0;

scoretext = 0;

cookie_increaser = 1;

var dosomething = function () {
  score = score   cookie_increaser;
 document.getElementById("H1").innerText = score;
};

var dosomethingelse = function () {
  if (score > 10) {
    score = score - 10;
    document.getElementById("H1").innerText = score;
    cookie_increaser = 2
  }
}

   var dosomethingelse2 = function () {
  if (score > 20) {
    score = score - 20;
    document.getElementById("H1").innerText = score;
    cookie_increaser = 3
  }
}


var starttimer = function () {
  if (score > 100) {
    score = score - 100
  }
  setInterval(function () {
    score = score   1
    document.getElementById("H1").innerText = score;
  }, 1000)
  scoretext = scoretext   1;
  document.getElementById("h3").innerText = scoretext;
}


var starttimer2 = function () {
  if (score > 200) {
    score = score - 200
  }
  setInterval(function () {
    score = score   3
    document.getElementById("H1").innerText = score;
 }, 1000)
  scoretext = scoretext   3;
  document.getElementById("h3").innerText = scoretext;
} 

document.getElementById("btn1").addEventListener("click", dosomething)

document.getElementById("btn2").addEventListener("click", dosomethingelse)

document.getElementById("btn3").addEventListener("click", dosomethingelse2)

document.getElementById("btn4").addEventListener("click", starttimer)

document.getElementById("btn5").addEventListener("click", starttimer2)
 

HTML-скрипт.

   <body>
    <h1>      </h1>
    <h1> Clicks <img  width = "50"  
    src="https://www.iconpacks.net/icons/2/free-click-icon-2384-thumb.png" </h1>   
    <h1 id="H1"> 0</h1>
    <button id="btn1">Press me!</button>
    <button id="btn2">Upgrade! -- Cost: 10 points (2 per click)</button>
    <button id="btn3">Upgrade! -- Cost: 20 points (3 per click)</button>
    <button id="btn4">Upgrade! -- Cost: 100 points (1 per second)</button>
    <button id="btn5">Upgrade! -- Cost: 200 points (3 per second</button>
    <h1> Automatic clicks per second</h1>
    <h2 id="h3"> 0</h2>
    <script src="script.js"></script>
  </body>
 

Ответ №1:

Вероятно, ваша функция обратного вызова с интервалом закрывается по старому значению score . Вместо этого попробуйте взять текущее значение прямо со страницы:

     const newScore = parseInt(document.getElementById("H1").innerText)   1
    document.getElementById("H1").innerText = newScore;
 

Ответ №2:

Ну, вы просто неправильно расставляете скобки в последних 2 функциях

 var starttimer2 = function () {
  if (score > 200) {
    score = score - 200
      setInterval(function () {
        score = score   3
        document.getElementById("H1").innerText = score;
      }, 1000)
      scoretext = scoretext   3;
      document.getElementById("h3").innerText = scoretext;
    }
} 
 

Кроме того, лучше создавать новую переменную со значением, которое вы добавляли бы к счету каждую секунду, чем несколько таймеров.
И вызывайте функцию с аргументом всякий раз, когда вам нужно его увеличить.

 score_increment = 0;
score = 500;

setInterval(function () {
    score  = score_increment;
    document.getElementById("H1").innerText = score;
}, 1000)

function increase_increment(cost, increment) {
    if (score > cost) {
        score -= cost;
        score_increment  = increment;
        document.getElementById("h3").innerText = score_increment;
    }
} 

document.getElementById("btn5").addEventListener("click", increase_increment(200, 3))
 

Комментарии:

1. Большое спасибо, ребята!