web-dev-qa-db-fra.com

utilisation illégale de la déclaration de rupture; javascript

Lorsque cette variable devient un certain montant, je veux que la boucle s’arrête, mais l’erreur "Uncaught SyntaxError: Illegal break statement" continue de me produire.

function loop() {
    if (isPlaying) {
        jet1.draw();
        drawAllEnemies();
        requestAnimFrame(loop);
        if (game==1) {

            break;

        }

    }
} 
34
lehermj

break est de rompre une boucle comme pour, tandis que, vous changez de fonction, etc. que vous n'avez pas ici, vous devez utiliser return pour interrompre le flux d'exécution de la fonction actuelle et retourner à l'appelant.

function loop() {
    if (isPlaying) {
        jet1.draw();
        drawAllEnemies();
        requestAnimFrame(loop);
        if (game == 1) {
           return
        }
    }
}

Note: Ceci ne couvre pas la logique derrière la condition if ou le moment de retourner de la méthode, pour cela nous avons besoin de plus de contexte concernant la méthode drawAllEnemies et requestAnimFrame ainsi que la façon dont game la valeur est mise à jour

52
Arun P Johny

Vous devez vous assurer que requestAnimFrame cesse d'être appelé une fois que le jeu est == 1. Une instruction break quitte uniquement une boucle classique (par exemple, while()).

function loop() {
    if (isPlaying) {
        jet1.draw();
        drawAllEnemies();
        if (game != 1) {
            requestAnimFrame(loop);
        }
    }
}

Sinon, vous pouvez simplement ignorer la deuxième condition if et modifier la première condition en if (isPlaying && game !== 1). Vous devez créer une variable appelée game et lui attribuer la valeur 0. Ajoutez 1 à chaque jeu.

5
Bart

J'ai une fonction next() qui va peut-être vous inspirer.

function queue(target) {
        var array = Array.prototype;

        var queueing = [];

        target.queue = queue;
        target.queued = queued;

        return target;

        function queued(action) {
            return function () {
                var self = this;
                var args = arguments;

                queue(function (next) {
                    action.apply(self, array.concat.apply(next, args));
                });
            };
        }

        function queue(action) {
            if (!action) {
                return;
            }

            queueing.Push(action);

            if (queueing.length === 1) {
                next();
            }
        }

        function next() {
            queueing[0](function (err) {
                if (err) {
                    throw err;
                }

                queueing = queueing.slice(1);

                if (queueing.length) {
                    next();
                }
            });
        }
    }
0
felix metge