斯威夫特:随机一段时间后重复动作

时间:2014-07-07 12:20:57

标签: random swift sprite-kit nstimer performselector

以前,使用Objective-C我可以使用performSelector:以便在一段随机时间后重复一个动作,该动作可能在1-3秒之间变化。但由于我无法使用performSelector:在Swift中,我尝试过使用" NSTimer.scheduledTimerWithTimeInterval"。它的工作原理是为了重复这个动作。但有一个问题。设置时间变量以调用将生成随机数的函数。但似乎NSTimer每次重复动作时都会使用相同的数字。

这意味着该动作不是随机执行的,而是在游戏开始时随机生成的一段时间之后执行,并在整个游戏中使用。

问题是:有没有办法设置NSTimer每次执行动作时创建一个随机数?或者我应该使用不同的方法?谢谢!

3 个答案:

答案 0 :(得分:5)

@ LearnCocos2D是正确的......在场景中使用SKActionsupdate方法。以下是使用update在随机时间段后重复操作的基本示例。

class YourScene:SKScene {

    // Time of last update(currentTime:) call
    var lastUpdateTime = NSTimeInterval(0)

    // Seconds elapsed since last action
    var timeSinceLastAction = NSTimeInterval(0)

    // Seconds before performing next action. Choose a default value
    var timeUntilNextAction = NSTimeInterval(4)

    override func update(currentTime: NSTimeInterval) {

        let delta = currentTime - lastUpdateTime
        lastUpdateTime = currentTime

        timeSinceLastAction += delta

        if timeSinceLastAction >= timeUntilNextAction {

            // perform your action

            // reset
            timeSinceLastAction = NSTimeInterval(0)
            // Randomize seconds until next action
            timeUntilNextAction = CDouble(arc4random_uniform(6))

        }

    }

}

答案 1 :(得分:3)

在代码中使用let wait = SKAction.waitForDuration(sec, withRange: dur)。带有 withRange 参数的SKAction.waitForDuration将计算随机时间间隔,平均时间=秒,可能范围= dur

答案 2 :(得分:0)

自己生成随机时间并使用dispatch_after执行操作。

有关dispatch_after的详细信息,请参阅here。基本上你可以使用它而不是performSelector