2015-07-28 53 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