2015-07-28 51 views
0

我想在設置的位置產卵多個SKSpriteNodes,但是當我添加多個節點時,它們只是在彼此之上產卵?有沒有辦法做到這一點?產生不同位置的多個節點

我也有一個問題,不得不刷新頁面以獲得節點的新位置。有沒有辦法讓節點在頁面上消失,它會在集合中的新位置產生?

let rect = CGRectMake(x: 90, y: 360, width: 200, height: 200) 
let x = rect.origin.x + CGFloat(arc4random()) % rect.size.width 
let y = rect.origin.y + CGFloat(arc4random()) % rect.size.height 
let randomPoint = CGPointMake(x, y) 
self.redcircle.position = randomPoint 
self.addChild(redcircle) 
self.bluecircle.position = randomPoint 
self.addChild(bluecircle) 

回答

0

你需要2個randomPoint來把它們放在另一個地方。 您使用2個節點與一個位置原因randomPoint始終是相同的。

編輯(在評論的問題):

你必須使用分鐘(X,Y)和max(X,Y)

let x = random(CGRectGetMinX(self.frame), max: CGRectGetMaxX(self.frame)) 
    let y = random(CGRectGetMinY(self.frame), max: CGRectGetMaxY(self.frame)) 

let randomPoint = CGPointMake(x, y) 
self.redcircle.position = randomPoint 
self.addChild(red circle) 

而且這裏的隨機函數:

func random() -> CGFloat { 
     return CGFloat(Float(arc4random())/0xFFFFFFFF) 
    } 

    func random(min: CGFloat, max: CGFloat) -> CGFloat { 
     return random() * (max - min) + min 
    } 
+0

謝謝!你知道我可以做什麼來在不同的地方產生節點而不需要退出屏幕。所以我可以使用SKAction淡出,它會重新出現在不同的位置? – MattJB

+0

編輯,你需要屏幕的最小和最大 – Lirf

0

您可以更容易地製作一種基於給定矩形生成隨機點的方法。或方法,它派生給定的矩形內的精靈,就像這樣:

import SpriteKit 


class GameScene: SKScene { 

    let rect = CGRect(x: 90, y: 360, width: 200, height: 200) 

    override func didMoveToView(view: SKView) { 


     let debug = SKSpriteNode(color: SKColor.redColor(), size: rect.size) 

     debug.alpha = 0.2 

     debug.position = rect.origin 

     let origin = SKSpriteNode(color: SKColor.redColor(), size:CGSize(width: 5, height:5)) 

     debug.addChild(origin) 

     self.addChild(debug) 

    } 

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

     let sprite = spawnSpriteAtRandomPositionWithinRect(rect) 


     self.addChild(sprite) 


     println("Sprite spawned at position x,y(\(sprite.position.x), \(sprite.position.y))") 
    } 

    func randomBetweenNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat{ 

     return CGFloat(arc4random())/CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum) 
    } 

    func spawnSpriteAtRandomPositionWithinRect(rectangle:CGRect)->SKSpriteNode{ 


     let x = randomBetweenNumbers(rectangle.origin.x - rectangle.size.width/2.0 , secondNum: rectangle.origin.x + rectangle.size.width/2.0) 
     let y = randomBetweenNumbers(rectangle.origin.y - rectangle.size.height/2.0 , secondNum: rectangle.origin.y + rectangle.size.height/2.0) 

     let sprite = SKSpriteNode(color: SKColor.greenColor(), size:CGSize(width: 30, height: 30)) 

     sprite.position = CGPoint(x: x, y: y) 


     return sprite 
    } 

} 

名爲雪碧實際上並不需要調試,但它表明你在視覺上給定的矩形。

+0

它說我不能讓sprite = spawnSpriteAtRandomPositionWithinRect(rect)那裏,因爲它是在聲明之前? – MattJB

+0

@MattJB我沒有收到上述代碼的任何錯誤。你能複製和粘貼真正的錯誤信息嗎? – Whirlwind

+0

我嘗試了應用程序中的新文件中的代碼,但它與文件中的其他代碼一起工作,是否有辦法讓整個代碼變得有趣,所以我可以通過新文件添加它? – MattJB