1
votes

setTimeout () n'exécute pas la fonction souhaitée?

Je travaille sur un projet pour l'école, et j'ai utilisé une fonction setTimeout () pour exécuter ma fonction flawlessWin, mais elle ne l'exécute pas. Je pense que j'avais l'habitude de la bonne syntaxe, mais je suis nouveau en Javascript, donc je ne vois peut-être pas quelque chose d'évident. Toute aide ou suggestion est appréciée!

J'ai recherché la syntaxe pour m'assurer que tout est correct et que tout semble correct. Je ne sais vraiment pas pourquoi cela ne fonctionne pas.

Lien vers le code - https://codepen.io/Jacob-Bruce/pen/mQgbXa

    function executeTimeout() {
  setTimeout(flawlessWin, 100);
};  
function flawlessWin() {
   ctx.font = "30px Arial";
   ctx.fillText("Flawless Victory!", canvas.width/3, canvas.height/3)
};
// collision
function collisionDetection() {
  for(var c=0; c<brickColumnCount; c++) {
    for(var r=0; r<brickRowCount; r++) {
      var b = bricks[c][r];
      if(b.status == 1) {
        if(x > b.x && x < b.x+brickWidth && y > b.y && y < 
           b.y+brickHeight) {
          dy = -dy;
          b.status = 0;
          score++;
          // win condition - find out why the AND log. operator isn't 
              working

          if(score == brickRowCount*brickColumnCount) {
              executetimeout();

          }
        }
      }
    }
  }
}

Je m'attends à ce que la fonction flawlessWin soit exécutée une fois le timeout exécuté .


2 commentaires

Vous pourriez juste avoir une faute de frappe: vous appelez executetimeout () mais votre nom de fonction est executeTimeout () . De plus, working ne fait pas partie de votre commentaire. Si c'est votre code textuel, cela provoquera des erreurs de syntaxe.


désolé d'être confus, le «travail» en fait partie, il vient d'être poussé vers le bas d'une ligne, je suppose. Mais j'ai corrigé la faute de frappe, merci!


3 Réponses :


4
votes

Vous avez une faute de frappe. Votre fonction est executeTimeout () , mais lorsque vous l'appelez à l'intérieur de

if (score == brickRowCount*brickColumnCount) {
  executetimeout();
}

le premier "t" dans timeout n'est pas en majuscule. JavaScript est sensible à la casse.


3 commentaires

Ça ne gèle même plus la toile maintenant, je ne sais pas pourquoi.


Il était gelé auparavant car votre code lançait une exception en raison de l'appel de fonction non défini. Vérifiez que votre condition de victoire est atteinte, et si / quand c'est le cas, vous devrez peut-être retourner ou en quelque sorte sortir de la détection de collision et arrêter l'animation.


Merci à tous ceux qui ont voté pour! Jacob, je ne sais pas comment résoudre ce problème, mais je suppose que Cory a clarifié cela pour vous!



2
votes
function executeTimeout() {
  //setTimeout(flawlessWin, 100);
    setTimeout(function () {
         flawlessWin();  
         }, 100);
};

  I think you need to use this syntax to use set timeout function,i hope it will work.

0 commentaires

0
votes

Javascript est extrêmement sensible à la casse, donc quand vous dites

executeTimeout();

Cela devrait être

executetimeout();


0 commentaires