2014-12-01 78 views
4

我正在製作一款克隆遊戲Simon(a.k.a. Genius,巴西),其中有一個彩色按鈕,玩家需要按照一系列顏色按下。調用和通話之間的延遲

爲了測試,接口具有4個彩色按鈕 我創建爲按鈕出口陣列,以便於訪問:

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

此外,創建了另一個數組來存儲顏色的序列

var colors:[Int] = [] 

當遊戲開始時,它調用一個函數,它添加一個從0到3的隨機數(buttonArray上的索引),並將此數字添加到colors數組 添加新顏色的顏色序列後,應用程序需要顯示順序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 
      })     
     }  
} 

它將alpha從按鈕更改爲0.2,然後在半秒鐘後將alpha返回到1.我使用dispatch_after,傳遞0.5秒並在代碼塊上返回alpha,就像你們可以請參閱上面的代碼。

在第一次運行時,它看起來是正確的,但當colors數組有2個或更多項目時,當它運行循環時,雖然它有0.5秒的延遲,但它同時閃爍所有按鈕。

這可能是我犯的一個愚蠢的錯誤,但我現在一無所知。

我將非常感謝所有的幫助!

謝謝!

+0

時間/延遲永遠不會改變 – 2014-12-01 22:49:49

回答

2

所有這些dispatch_after電話幾乎在同一時間安排,使他們似乎在同一時間閃爍。有一對夫婦的,將解決這個問題的辦法:

你可以,例如,調整爲每個按鈕when參數(dispatch_time_t參數)從原來的時間偏移(這樣delay是,有效i * 0.5 * Double(NSEC_PER_SEC))。

您也可以使用關鍵幀動畫,但我建議您首先嚐試先在dispatch_after方法中修復delay

+0

非常感謝你非常非常,羅伯!你明白了! 它現在工作很棒! – 2014-12-01 23:08:47