2017-03-29 8 views
0

私はIF文を持っているので、スコア> = 200のときにトリガする必要がありますが、1回だけ繰り返されます。Swift IF文を1回だけ実行する

は、ここに私のコードです:

if score >= 200 { 

     meteRedTimer.invalidate() 
     meteBlueTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.makeBlueMete), userInfo: nil, repeats: true) 

    } else {  


    } 

しかし、これは常にタイマーにスコアが、私は理解して=> 200だけではなく、1つのタイマーであるすべての時間を開始します。

もし私がscore = 200なら、これはうまくいくかもしれませんが、ゲームのプレイによってはスコアが190から210にジャンプする可能性があります。

一度トリガーされたら、このIFステートメントを基本的に停止できますか?

+0

私はあなたの目標に到達できません、あなたは何をしたいのか説明できましたか? –

+0

もう少し文脈を与えることができますか? – raphh

+0

@ NazmulHasan IF文が実行されると、IF文を終了します。 –

答えて

1

meteBlueTimerは、オプションとして宣言されていることを確認した場合var didPermored = falseと内部を作成します。

var meteBlueTimer: Timer? 

次に、nilであるかどうかを確認します。

if score >= 200 { 
    if meteBlueTimer == nil { 
     meteRedTimer.invalidate() 
     meteBlueTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.makeBlueMete), userInfo: nil, repeats: true) 
    } 
} else {  
} 

この方法では、meteBlueTimerを1度だけ作成します。

1

声明

if score >= 200 && !didPermormed { 
    didPermormed = true 
    meteRedTimer.invalidate() 
    meteBlueTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.makeBlueMete), userInfo: nil, repeats: true) 
} else {  

//do stuff 
} 
1

は、タイマーが(nil)が実行されていないかどうかを確認後、オプション

var meteBlueTimer : Timer? 
var meteRedTimer : Timer? 

としてあなたのタイマーを宣言します。無効化されたタイマーをnilに設定します。

if score >= 200 && meteBlueTimer == nil { 
     meteRedTimer?.invalidate() 
     meteRedTimer = nil 
     meteBlueTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.makeBlueMete), userInfo: nil, repeats: true) 

} else { ... 
+0

良い考え:) – rmaddy

関連する問題