Reputation: 1
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
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