2016-04-09 14 views
-2
if (skin_var == 1) { 
     skin = "%kraken"; 

     skin_var = 2; 
    } 
    if (skin_var == 2) { 
     // this won't activate 
     skin = "%mercury"; 

     skin_var = 3; 
    } 
    if (skin_var == 3) { 
     skin = "%shark"; 

     skin_var = 4; 
    } 
    if (skin_var == 4) { 
     // this won't activate either 
     skin = "%banana"; 

     skin_var = 5; 
    } 
    if (skin_var == 5) { 
     skin = "%nuclear"; 

     skin_var = 6; 
    } 
    if (skin_var == 6) { 
     skin = "%space_dog"; 

     skin_var = 7; 
    } 
    if (skin_var == 7) { 
     skin = "%t_rex" 

     skin_var = 8; 
    } 
    if (skin_var == 8) { 
     // gets stuck right here 
     skin = "%spy" 

     skin_var = 1; 
    } 

Das ist mein Code oben. Wie Sie an den kommentierten Zeilen sehen können, funktionieren sie immer nicht oder bleiben irgendwann stecken. Gibt es einen effizienten Weg dies zu tun oder einen Weg es zu reparieren?Wenn die Schleife stoppt und nicht funktioniert

Ich möchte nur die Haut in etwas jede Sekunde für immer ändern, und ich habe setInterval() verwendet; aber es scheint nur "% kraken" zu "% shark" zu "% nuclear" zu "% t_rex" zu machen und dann läuft es, bevor ich "% spy" hinzugefügt habe.

+0

Was ist ein "if-Schleife"? Hier gibt es keine Schleife. Was bedeutet "es hängt fest"? Hast du debuggen? –

+0

Verwenden if-sonst Bedingungen oder das Ergebnis wird immer skin = "% spion" –

Antwort

0
// Instead of switch or if statement I made an array with all values 
var values = ["%kraken", "%mercury", "%shark", "%banana", "%nuclear", "%space_dog", "%t_rex", "%spy"]; 

var i = 0; 

// Foreach loop I set a different value to skin variable, with the i value. When i variable is great than values' length I set it to zero (interval is 1000 millisecond) 
setInterval(function(){ 
    if (i > values.length -1) { 
     i = 0; 
    } 
    skin = values[i]; 
    i++; 
}, 1000); 
+0

Denken Sie daran, als Antwort zu markieren ;-) – Max

-1

Ein switch wird lesbarer und effizienter als ein if in Ihrem Fall sein. Dies ermöglicht es Ihnen, nur den skin_var Wert einmal im Gegensatz zu jedem Mal in Ihrem if nachschlagen.

Dies tut, was Sie fragen. Stellen Sie sicher, dass Ihre Konsole eingeschaltet ist, wenn Sie sie ausführen.

function changeSkin(){ 
 
    switch (skin_var){ 
 
    case 1: 
 
     skin = "%kraken"; 
 
     break;  
 
    case 2 : 
 
     skin = "%mercury"; 
 
     break;  
 
    case 3: 
 
     skin = "%shark"; 
 
     break;  
 
    case 4: 
 
     skin = "%banana"; 
 
     break;  
 
    case 5: 
 
     skin = "%nuclear"; 
 
     break;  
 
    case 6: 
 
     skin = "%space_dog"; 
 
     break;  
 
    case 7: 
 
     skin = "%t_rex" 
 
     break;  
 
    case 8: 
 
     skin = "%spy" 
 
     skin_var = 0; 
 
     break; 
 
    default: 
 
     skin_var = 0; 
 
     break; 
 
    } 
 
    ++skin_var; 
 
    console.log(skin); 
 
} 
 
var skin_var = 1; 
 
setInterval(changeSkin, 1000)

+0

Down-Abstimmung ohne Kommentar für die richtige Antwort ?! –

+0

Hmm ... Ich werde das versuchen – Xtreme

0

Ich bin versuchen, den Code Konservierer, die Sie bereits gemacht haben, die setInterval Zugabe und mit dem Operator% zu machen, dass der Wert von skin_val var immer im Bereich bleiben von 0 bis 7

var skin_var = 0; 
var skin; 
function changeSkin(){ 
    if (skin_var == 0) { 
    skin = "%kraken"; 
} 
if (skin_var == 1) { 
    // this won't activate 
    skin = "%mercury"; 
} 
if (skin_var == 2) { 
    skin = "%shark"; 
} 
if (skin_var == 3) { 
    // this won't activate either 
    skin = "%banana"; 
} 
if (skin_var == 4) { 
    skin = "%nuclear"; 
} 
if (skin_var == 5) { 
    skin = "%space_dog"; 
} 
if (skin_var == 6) { 
    skin = "%t_rex" 
} 
if (skin_var == 7) { 
    // gets stuck right here 
    skin = "%spy" 
} 
skin_var = (skin_var+1)%8 
console.log(skin); 
} 
window.setInterval(changeSkin, 1000); 

Sie können die Ergebnisse im Konsolenprotokoll sehen.

0

Diese Antwort verwendet stattdessen eine einfache rekursive setTimeout.

var skins = [ 
    '%kraken', '%mercury', '%shark', '%banana', '%nuclear', '%space_dog', '%t_rex', '%spy' 
]; 

var skin; 

function changeSkin(i) { 
    skin = skins[i = i && i < skins.length ? i : 0]; 
    setTimeout(changeSkin, 1000, ++i); 
} 

changeSkin(); 

DEMO

Verwandte Themen