2016-12-24 2 views
1

Следующая функция подсчитывает красный-зеленый свет, затем подсчитывает время реакции пользователя на нажатие кнопки после отображения зеленого индикатора.Вложенный оператор if в быстрой функции

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) 

    } 
} 

В нем указано else if timerInt == 0, пользователю предоставляется случайная функция. Изображение либо станет зеленым, либо отобразится «x».

Если отображается x, я хотел бы, чтобы пользователь нажал кнопку, в которой говорится, что игра завершена, чтобы перезапустить последовательность красного света.

Если отображается зеленый свет, я бы хотел, чтобы пользователь испытал время реакции.

Так функционирует функция уже сейчас, за исключением того, что она не изменяется, если отображается x. Я предполагаю, что я хотел бы функцию, чтобы запустить следующим образом:

если timeInt == 0 и зеленый свет выбирается
затем запустить время реакции тест

еще если timeInt == 0 и х выбран
, а затем завершить время реакции и запустить игру над кнопкой

Как я могу это достичь?

+2

0.0001 для вашего таймера это слишком быстрая частота обновления. Это нужно будет выполнять 10 тысяч раз в секунду. Просто используйте 1/30, это время, необходимое для большинства обновлений дисплея, которые могут вам понадобиться. –

+0

Ваш вопрос слишком общий. Может быть, вы можете дать нам немного больше контекста. Как вы проверяете время реакции? Как вы заканчиваете время реакции? Что должно делать updateScoreTime()? –

ответ

0

Я не совсем уверен, чего вы пытаетесь достичь, поэтому я сделал все возможное. Попробуйте это:

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) 

    } 
} 

Заменить первые два комментария (он же строки, начинающиеся с //) с соответствующим кодом, а также принять к сведению третьих и четвертых комментариев.

Смежные вопросы