如何在update()中按下按钮时启动int秒计数器?

时间:2015-03-23 05:19:57

标签: ios swift sprite-kit

我正在尝试制作一个在GameScene.update()中运行的第二个计数器,当我按下一个按钮达5秒钟时计数,然后停止并重置为0等待按下另一个按钮。

这是我按下的if按钮代码:

override func update(currentTime: CFTimeInterval) {

    if (Data.gameScene.buttonPressed == true) {
        player.texture = SKTexture(imageNamed: "Spaceship2")
        player.physicsBody = nil
    }
}

正如你所看到的,当按下按钮时,玩家变得不可见(Spaceship2的低不透明度)并且它不再具有物理身体(因此敌人无法击中它)。

我想要的是这个(伪代码):

if (button pressed == true) {
    start timer
    if timer < 5 seconds { 
        player can't be hit and is invisible
    } else {
         player can be hit and is visible
      }
 }

有人可以帮我吗?

3 个答案:

答案 0 :(得分:2)

您可以通过一系列等待操作和runBlock操作来完成此操作。

override func update(currentTime: CFTimeInterval) {

    if (Data.gameScene.buttonPressed == true) {
        //put code to make the player invisible

       let waitAction = SKAction.waitForDuration(5)
       let makePlayerVisibleAction = SKAction.runBlock {
           //put code to make the player visible
       }
       let action = SKAction.sequence([waitAction, makePlayerVisibleAction])

       player.runAction(action)  
    }
}

答案 1 :(得分:0)

只需设置一个在5秒后触发的计时器:

class MyViewController: UIViewController {
    var timer: NStimer?
    var timerIsRunning = false

    func buttonPressed() {
        if timerIsRunning {
            return
        }

        // start the timer
        self.timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "update", userInfo: nil, repeats: false)
        self.timerIsRunning = true

        player.texture = SKTexture(imageNamed: "Spaceship2")
        player.physicsBody = nil
    }

    func update() {
        self.timer?.invalidate()
        self.timerIsRunning = false

        ...
    }

}

希望你明白这一点。

答案 2 :(得分:0)

由于update函数定期调用,并且方便地提供时间戳(以秒为单位),您只需在按下按钮时保存时间戳,并使用它来确定何时5秒完成了。

override func update(currentTime: CFTimeInterval) {

    if (Data.gameScene.buttonPressed == true) {
        player.texture = SKTexture(imageNamed: "Spaceship2")
        player.physicsBody = nil
        player.isInvisible = true
        player.startInvisible = currentTime
    }
    else if (player.isInvisible){
        if (currentTime - player.startInvisible > 5) {
            player.isInvisible = false
            player.texture = ...
            player.physicsBody = ...
        }
    }
}