2014-12-01 1 views
4

나는 그 오래된 게임 Simon (브라질의 a.k.a. Genius)을위한 클론을 만들고 있는데, 플레이어는 색깔의 순서대로 누른다. 테스트에 대한전화와 발신 사이의 지연과 지연

는 인터페이스 I 쉽게 액세스 버튼 출구위한 배열을 생성 4 개 컬러 단추 가지고 또한

var buttonArray:[UIButton] = [self.greenButton, self.yellowButton, self.redButton, self.blueButton] 

색상의 시퀀스를 저장하는 다른 배열을 생성

var colors:[Int] = [] 

게임이 시작되면 0에서 3까지의 임의의 숫자 (buttonArray의 인덱스)를 추가하는 함수를 호출하고이 숫자를 colors 배열에 추가합니다. 새 시퀀스에 색상 시퀀스를 추가 한 후 앱에서 해당 sequen을 표시해야합니다 사용자에 대한 CE, 그래서 그는 그것을 그것에 대해

반복 수, 그것은 '깜빡임'

시뮬레이션 버튼의 알파 변경 색상 배열을 통해 루프의 실행을 사용하고 playMoves 함수를 호출
func playMoves(){ 

    let delay = 0.5 * Double(NSEC_PER_SEC) 
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 

     for i in self.colors{ 

      self.buttonArray[i].alpha = 0.2 

      dispatch_after(time, dispatch_get_main_queue(), { 
       self.buttonArray[i].alpha = 1 
      })     
     }  
} 

버튼을 0.2로 변경 한 다음 0.5 초 후에 알파를 1로 반환합니다. 나는 dispatch_after를 사용하여 0.5 초를 지나서 알파를 반환합니다. 여러분이 할 수있는 것처럼 위의 코드를 참조하십시오.

첫 번째 실행에서는 색상 배열에 2 개 이상의 항목이있는 경우 루프를 실행할 때 0.5 초 지연이 있지만 동시에 모든 단추가 깜박입니다 .

아마도 내가하고있는 바보 같은 실수 일 겁니다. 그러나 나는 그 순간에 우둔합니다.

대단히 감사합니다!

감사합니다.

+0

시간/지연이 절대로 변경되지 않습니다 –

답변

2

이러한 모든 dispatch_after 호출은 거의 동시에 실행되도록 예약되어 동시에 깜박임을 나타냅니다. 이 문제를 해결 할 방법의 몇 가지가 있습니다 : 원래 시간 오프셋 할 당신은, 예를 들어, 각 버튼에 대한 when 매개 변수합니다 (dispatch_time_t 매개 변수)를 조정할 수

이 (delay는이되도록 효과적으로 i * 0.5 * Double(NSEC_PER_SEC)).

키 프레임 애니메이션을 사용할 수도 있지만 먼저 dispatch_after 접근 방식에서 delay을 수정 해 보시기 바랍니다.

+0

매우 고맙습니다, 롭! 당신이 바로 그 지점에있어! 이제 잘 작동합니다! –