2016-11-20 4 views
0

Ich versuche, ein Simon sagt Spiel zu bauen, und gerade jetzt bin ich in dem Teil stecken, wo ich die Tasten, die der Benutzer klicken muss leuchten. Ich mache es mit einem "for", um jeden Teil des Arrays zu analysieren, in dem ich die Sequenz ablege, dann sollte das Array in jede Runde gehen und den Knopf leuchten, so; und weiter. Aber aus irgendeinem Grund das "für" den Hintergrund jedes div zu ändern, das im Array zur gleichen Zeit passiert, obwohl ich ein Element Intervall verwende, um bei jedem Knopf zu stoppen.Intervalle und Verzögerungen mit JS

Hier ist der codepen Ich arbeite mit:

https://codepen.io/argestis/pen/gLraBq?editors=0011

function litSequence() { 
    for (var i = 0; i < game.count.length; i++) { 
    if (game.count[i] === 1) { 
     game.blue.css("background-color", "cyan"); 
     setTimeout(function() { 
     game.blue.css("background-color", "blue"); 
     }, 1500); 

    } else if (game.count[i] === 2) { 
     game.red.css("background-color", "pink"); 
     setTimeout(function() { 
     game.red.css("background-color", "red"); 
     }, 1500); 

    } else if (game.count[i] === 3) { 
     game.green.css("background-color", " #4dff4d"); 
     setTimeout(function() { 
     game.green.css("background-color", "green"); 
     }, 1500); 

    } else if (game.count[i] === 4) { 
     game.yellow.css("background-color", "orange"); 
     setTimeout(function() { 
     game.yellow.css("background-color", "yellow"); 
     }, 1500); 
    } 
    } 
}; 
+0

Es sieht so aus, als ob Ihr codepen viele jQueries nach dem Bootstrap JS lädt. – mplungjan

Antwort

1

setTimeout ist -StoP- nicht Ihre Logik. Sie können sich einen parallelen logischen Verknüpfungspunkt vorstellen. Ihre Logik wird weiterlaufen und erst nach Ablauf dieser Zeit wird die Logik im Timeout ausgeführt. Da js sehr schnell läuft, wird es höchstwahrscheinlich der Fall sein, dass all Ihre setTimeouts innerhalb der Loops alle relativ nahe beieinander feuern, um gleichzeitig zu erscheinen.

+0

Gibt es eine Möglichkeit, wie ich die Schleife stoppen könnte, damit sie eine nach der anderen langsamer abfeuern kann? –

+1

Anstatt zu versuchen, den Logikfluss zu stoppen, sollten Sie in Betracht ziehen, die Verzögerungszeit dynamisch so zu bemessen, dass sie in der von Ihnen erwarteten Reihenfolge erfolgt. Oder vielleicht wäre es so einfach wie zu Ihren Verzögerungszeiten zu wechseln '(game.count [i] * 1500)' – Taplar