2016-12-24 4 views
1

Die folgende Funktion zählt ein rotes bis grünes Licht herunter und zählt dann die Reaktionszeit für den Benutzer, um eine Schaltfläche zu drücken, nachdem das grüne Licht angezeigt wird.verschachtelt if-Anweisung in swift-Funktion

func updateCounter() { 

    timerInt -= 1 
    if timerInt == 2{ 
     light.image = UIImage(named: "r.png") 
    } else if timerInt == 1 { 
     light.image = UIImage(named: "yellow.png") 


    } else if timerInt == 0 { 

     light.image = UIImage(named: arc4random_uniform(2) == 0 ? "no.png" : "g.png") 


     timer.invalidate() 
     startStop.isEnabled = true 
     scoreTimer = Timer.scheduledTimer(timeInterval: 0.0001, target: self, selector: #selector(ViewController.updateScoreTime), userInfo: nil, repeats: true) 

    } 
} 

Dort, wo es else if timerInt == 0 angibt, erhält der Benutzer eine zufällige Funktion. Ein Bild wird entweder grün oder ein "x" wird angezeigt.

Wenn das x angezeigt wird, möchte ich, dass der Benutzer eine Taste drücken muss, die das Spiel anzeigt, um die Rotlichtsequenz neu zu starten.

Wenn ein grünes Licht angezeigt wird, möchte ich, dass der Benutzer ihre Reaktionszeit testen muss.

So läuft die Funktion bereits jetzt, außer dass sie sich nicht ändert, wenn das x angezeigt wird. Ich glaube, ich würde die Funktion gerne laufen wie folgt:

wenn timeInt == 0 und grünes Licht gewählt wird
dann Testreaktionszeit

else if timeInt == 0 und x laufen
gewählt dann Reaktionszeit beenden und Run-Spiel über Knopf

Wie kann ich das erreichen?

+2

0,0001 für Ihren Timer ist es zu schnell Bildwiederholfrequenz. Es müsste 10.000 Mal pro Sekunde ausgeführt werden. Verwenden Sie einfach 1/30, das ist die Zeit, die für die meisten Bildschirm-Updates benötigt wird. –

+0

Ihre Frage ist zu allgemein. Vielleicht können Sie uns ein wenig mehr Kontext geben. Wie testen Sie die Reaktionszeit? Wie beendest du die Reaktionszeit? Was soll updateScoreTime() tun? –

Antwort

0

Ich bin nicht genau sicher, was Sie erreichen wollen, also habe ich mein Bestes gegeben. Versuchen Sie folgendes:

func updateCounter() { 

    timerInt -= 1 
    if timerInt == 2{ 
     light.image = UIImage(named: "r.png") 
    } else if timerInt == 1 { 
     light.image = UIImage(named: "yellow.png") 
    } else if timerInt == 0 { 
     let green = (arc4random_uniform(2) == 0) 

     light.image = UIImage(named: (green ? "g.png" : "no.png")) 

     if green { 
      // run test reaction time 
     } else { 
      //end reaction time and run game over button 
     } 

     // NOTE: Do you mean `scoreTimer.invalidate()`? 
     timer.invalidate() 
     startStop.isEnabled = true 
     // NOTE: This time interval seems WAY too small ↓↓↓↓↓↓: it is only a millisecond! 
     scoreTimer = Timer.scheduledTimer(timeInterval: 0.0001, target: self, selector: #selector(ViewController.updateScoreTime), userInfo: nil, repeats: true) 

    } 
} 

Ersetzen Sie die ersten beiden Kommentare (aka Linien mit // beginnend) mit dem entsprechenden Code, und beachten Sie den dritten und vierten Kommentare.