选择随机障碍

时间:2015-05-04 14:30:11

标签: swift

   var timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("spawnredbarrier"), userInfo: nil, repeats: true)


}

    func spawnredbarrier(){


        var barrier = SKSpriteNode(imageNamed: "redobstacle.png")

        barrier.position = CGPointMake( 515, 0)
        let actionn = SKAction.moveToY(self.size.height, duration: 6)
        barrier.runAction(SKAction.repeatActionForever(actionn))

        self.addChild(barrier)

        var bluebarrier = SKSpriteNode(imageNamed: "blueobstacle.png")

        bluebarrier.position = CGPointMake( 515, 0)
        let action = SKAction.moveToY(self.size.height, duration: 6)
        bluebarrier.runAction(SKAction.repeatActionForever(action))

        self.addChild(bluebarrier)

        var greenbarrier = SKSpriteNode(imageNamed: "greenobstacle.png")

        greenbarrier.position = CGPointMake( 515, 0)
        let actionnn = SKAction.moveToY(self.size.height, duration: 6)
        greenbarrier.runAction(SKAction.repeatActionForever(actionnn))

        self.addChild(greenbarrier)



    }

我希望spawnbarriers的计时器每隔2秒选择一个随机障碍及其动作

我怎样才能使这个动作随机

以及如何使持续时间6以特定速率增加

1 个答案:

答案 0 :(得分:2)

第一个问题:要在Swift中获取随机数,您可以使用此SO question中的任何答案。为清晰起见,我会选择this one

  

此方法将在给定的最小值和最大值

之间生成随机Int值
func randomInt(min: Int, max:Int) -> Int {
    return min + Int(arc4random_uniform(UInt32(max - min + 1)))
}

完成后,只需创建一个简单的Switch语句:

let r = randomInt(0, 2)
switch r{
case 0: self.addChild(barrier)
case 1: self.addChild(bluebarrier)
case 2: self.addChild(greenbarrier)
default: println("Other")
}

您的功能如下:

func spawnredbarrier(){
        var barrier = SKSpriteNode(imageNamed: "redobstacle.png")

        barrier.position = CGPointMake( 515, 0)
        let actionn = SKAction.moveToY(self.size.height, duration: 6)
        barrier.runAction(SKAction.repeatActionForever(actionn))

        var bluebarrier = SKSpriteNode(imageNamed: "blueobstacle.png")

        bluebarrier.position = CGPointMake( 515, 0)
        let action = SKAction.moveToY(self.size.height, duration: 6)
        bluebarrier.runAction(SKAction.repeatActionForever(action))

        var greenbarrier = SKSpriteNode(imageNamed: "greenobstacle.png")

        greenbarrier.position = CGPointMake( 515, 0)
        let actionnn = SKAction.moveToY(self.size.height, duration: 6)
        greenbarrier.runAction(SKAction.repeatActionForever(actionnn))

        let r = randomInt(0, 2)
        switch r{
        case 0: self.addChild(barrier)
        case 1: self.addChild(bluebarrier)
        case 2: self.addChild(greenbarrier)
        default: println("Other")
      }
}

第二个问题:你需要一个Timer(你已经知道如何触发一个,只需创建另一个),并且在目标方法中只需增加一个保持速率值的iVar。使用iVar而不是硬编码6

更新

在类级别定义实例变量,然后调整iVar值的函数(需要检查当n达到0时会发生什么)。添加一个调用此函数的计时器,并使用n而不是硬编码6

var n: Int = 6

function adjustIVar() {
     self.n--
}