David Fakhouri
David Fakhouri

Reputation: 1

Choose a random obstacle

   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)



    }

i want the timer for spawnbarriers to choose a random obstacle and its actions every 2 seconds

how can i make this action random

and also how can i make the the duration that is 6 to increase at a specific rate

Upvotes: 0

Views: 101

Answers (1)

Diego Freniche
Diego Freniche

Reputation: 5414

1st question: to get a random number in Swift, you can use any answer from this SO question. I'll choose this one for clarity:

This method will generate a random Int value between the given minimum and maximum

func randomInt(min: Int, max:Int) -> Int {
    return min + Int(arc4random_uniform(UInt32(max - min + 1)))
}

Once you have this, just create a simple Switch statement:

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")
}

Your function will look like:

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")
      }
}

2nd question: you need a Timer (you already know how to fire one, just create another) and in the target method just increment one iVar holding the rate value. Use that iVar instead of hard coded 6

update:

Define your instance variable at class level, then a function to adjust the value of your iVar (you need to check what happens when n reach 0). Add a timer calling this function and use n instead of hard coded 6

var n: Int = 6

function adjustIVar() {
     self.n--
}

Upvotes: 2

Related Questions