2016-05-01 16 views
0

Swiftのpitfallと同様のゲームを作成していますが、プレーヤーがジャンプしているかどうかを示すブール値を作成しようとしています。 3秒後にブール値が偽になり、プレイヤーが再び下に移動するようにします。遅延機能を使用しようとしましたが、機能しませんでした。 ありがとうございます。Swiftの一定時間後に変数の値を変更します

+0

動作しなかった場合でも、試したコードを表示する必要があります。 –

答えて

0

Playerのオブジェクトは、isJumpingというプロパティを持つコードスニペットです。 truedidSetを使用)に設定すると、自動的に3秒後にisJumpingからfalseにリセットされるタイマーが開始されます。

スニペットでは、タイマーを快適に開始して操作するために、NSTimer拡張機能を使用しないでください。 https://gist.github.com/natecook1000/b0285b518576b22c4dc8

class Player {  
    private var resetJumpingTimer: NSTimer? 
    var isJumping: Bool = false { 
    didSet { 
     resetJumpingTimer?.invalidate() // Stops the timer in case it was already started 
     if isJumping { 
     self.resetJumpingTimer = NSTimer.schedule(3.0) { [weak self] _ in 
      self?.isJumping = false 
     } 
     } 
    } 
    } 
} 

extension NSTimer { 
    class func schedule(delay delay: NSTimeInterval, handler: NSTimer! -> Void) -> NSTimer { 
    let fireDate = delay + CFAbsoluteTimeGetCurrent() 
    let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, 0, 0, 0, handler) 
    CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes) 
    return timer 
    } 
} 
0

にクレジットプレイヤーはあなたがNSTimerを作成し、ジャンプした後。

は、プレイヤーがあなたがタイマーをセットにジャンプした後、その後のグローバル変数を宣言しlet timer = NSTimer()var seconds = 3

timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(YOUR_CLASS_NAME.updateTimer()), userInfo: nil, repeats: true) 

その後方法:

func updateTimer() { 
    seconds -= 1 
    if seconds == 0 { 
     // Do stuff 
     timer.invalidate() // Stop the timer 
     seconds == 3 // Reset # of seconds 
    } 

はそれを試してみると。

+0

このXcodeを実行した後、変数ではなく定数であるタイマーについて騒がしくなり、「GameScene」でインスタンスメンバー 'updateTimer'を使用するエラーが発生します;タイプ 'GameScene'代わりに。何をここで変更するか分からない。 – Aleppi

+0

'self.timer'か' gameScn = UIViewControllerを 'let 'とすれば? GameScene {//ここにタイマー行(selfと共に)} ' – Lawrence413

0

タイマーを無効にしない場合は、< =にすることができます。それは変数などのままです。

関連する問題