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é .
3 Réponses :
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.
Ç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!
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.
Javascript est extrêmement sensible à la casse, donc quand vous dites
executeTimeout();
Cela devrait être
executetimeout();
Vous pourriez juste avoir une faute de frappe: vous appelez
executetimeout ()
mais votre nom de fonction estexecuteTimeout ()
. 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!