I am sure that there are several ways to attack the problem, and this will be closest to what you have already written.
let sprites = [SKSpriteNode]()
let maxX = size.width
let maxY = size.height
var spritesAdded = [SKSpriteNode]()
for currentSprite in sprites{
addChild(currentSprite)
var intersects = true
while (intersects){
let xPos = CGFloat( Float(arc4random()) / Float(UINT32_MAX)) * maxX
let yPos = CGFloat( Float(arc4random()) / Float(UINT32_MAX)) * maxY
currentSprite.position = CGPoint(x: xPos, y: yPos )
intersects = false
for sprite in spritesAdded{
if (currentSprite.intersectsNode(sprite)){
intersects = true
break
}
}
}
spritesAdded.append(currentSprite)
}
, , , . , 1,000,000 , , .
, , - ...
var sprites = [SKSpriteNode]()
var maxX : CGFloat = 0.0
var maxY : CGFloat = 0.0
var spritesAdded = [SKSpriteNode]()
override func didMoveToView(view: SKView) {
maxX = size.width
maxY = size.height
}
func addSprite(){
if let currentSprite = sprites.first {
let xPos = CGFloat( Float(arc4random()) / Float(UINT32_MAX)) * maxX
let yPos = CGFloat( Float(arc4random()) / Float(UINT32_MAX)) * maxY
currentSprite.position = CGPoint(x: xPos, y: yPos )
for sprite in spritesAdded{
if (currentSprite.intersectsNode(sprite)){
return
}
}
addChild(currentSprite)
spritesAdded.append(currentSprite)
sprites.removeFirst()
}
}
override func update(currentTime: NSTimeInterval) {
addSprite()
}
, , . , , . , .