经过一段时间后如何更改变量?

时间:2015-07-09 04:04:32

标签: ios algorithm swift sprite-kit

说我有几枚硬币。当用户收集硬币时,我希望将某个变量设置为true。然后在10秒后,变量重置为false。

假设用户收集硬币。该变量设置为true。 6秒过关。在另一个4中,变量将重置为false。但是,用户现在收集另一枚硬币。还应该增加10秒钟。所以现在,变量将在14秒内重置为假,而不是4。

换句话说,每当用户在变量设置为true时收集硬币时,将向当前剩余的时间添加10秒。时间“增加”。

有人可以建议我怎么做吗?我已经有了代码来检测收集硬币的时间,但其余的都有问题。看起来很简单,但事实证明这是一个非常大的挑战。

这是我到目前为止所尝试的:

if coinCollected {
    //Execute this code every time a coin is collected

    timeBeforeVariableIsSetToFalse += 10

    if variableToBeReset == false {
       variableToBeReset = true

       runAction(
                 SKAction.runBlock({
                      while self.timeBeforeVariableIsSetToFalse > 0 {
                            self.runAction(SKAction.waitForDuration(NSTimeInterval(1)))
                            self.timeBeforeVariableIsSetToFalse --
                      }

                      self.variableToBeReset = false
                 })
       )
    }
}

然而,不是在每次减少timeBeforeVariableIsSetToFalse之间等待一秒钟,它们基本上都是在彼此之后发生的。好像self.runAction(SKAction.waitForDuration(NSTimeInterval(1)))被忽略了。

1 个答案:

答案 0 :(得分:0)

继承人我会做什么:

创建两个在类顶部定义的变量,并且可供所有例程使用。一个(booHasCoin)判断玩家是否已经拿起一枚硬币(如果你想在屏幕上设置硬币动画或其他东西),另一个(intCounter)将保持一定数量coin变量设置为false之前的秒数。

var intCounter:Int = Int()
var booHasCoin:Bool = Bool()

每次计时器滴答(将其设置为每秒刻度一次),请运行以下代码:

if intCounter > 0 {
    intCounter -= 1
    booHasCoin = true
} else {
    booHasCoin = false
}

每次玩家拿起一枚硬币时,你只需要运行以下代码:

intCounter = 10

计时器总是滴答作响,如果用户没有拿起硬币,那么intCounter将等于0并且booHasCoin将等于false。一旦他们拿起硬币,intCounter将等于10,每秒将减1,直到10秒后,intCounter = 0booHasCoin设置为false

我希望这会有所帮助:)。