Reputation: 51
i have 5 skspritesnodes, i want to spawn 1 random node at a time, i know i have to use arc4random but the examples ive tried dont seem to work. Id like a variable i can then input where ever i need start spawning random looking "enemys"
var bird0 = SKSpriteNode(imageNamed: "back_bird")
var bird1 = SKSpriteNode(imageNamed: "blue_bird")
var bird2 = SKSpriteNode(imageNamed: "green_bird")
var bird3 = SKSpriteNode(imageNamed: "purple_bird")
var bird4 = SKSpriteNode(imageNamed: "orange_bird")
i have the physicsbody set for each, size, ect. everything is all set minus the ability to randomly pick one to come out
Upvotes: 1
Views: 455
Reputation: 13665
As an addition to Sweeper's answer, you can make an extension:
import SpriteKit
import GameplayKit
extension Array {
var randomElement: Element {
return self[Int(arc4random_uniform(UInt32(count)))]
}
}
and use it like this:
class GameScene: SKScene {
let sprites = [
SKSpriteNode(color: .brown, size: CGSize(width:100,height:100)),
SKSpriteNode(color: .blue, size: CGSize(width:100,height:100)),
SKSpriteNode(color: .red, size: CGSize(width:100,height:100)),
SKSpriteNode(color: .green, size: CGSize(width:100,height:100)),
]
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
if let randomBird = sprites.randomElement.copy() as? SKSpriteNode{
if let location = touches.first?.location(in: self){
randomBird.position = location
addChild(randomBird)
}
}
}
}
Upvotes: 2
Reputation: 270890
You need to put the sprites in an array. Then, you can access a random element in that array.
Here's a function that returns a random bird.
func randomBird() -> SKSpriteNode {
let array = [bird0, bird1, bird2, bird3, bird4]
return array[Int(arc4random_uniform(UInt32(array.count)))]
}
You can also, put all the birds in an array and remove the variables bird0
, bird1
, bird2
and so on:
let birds = [
SKSpriteNode(imageNamed: "back_bird"),
SKSpriteNode(imageNamed: "blue_bird"),
SKSpriteNode(imageNamed: "green_bird"),
SKSpriteNode(imageNamed: "purple_bird"),
SKSpriteNode(imageNamed: "orange_bird")
]
Then birds[Int(arc4random_uniform(UInt32(array.count)))]
will get you a random bird.
Upvotes: 1