我试图在设置位置内生成多个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 :(得分:0)
您需要2个randomPoint才能将它们放在另一个地方。
您使用2个节点,其中一个位置原因randomPoint
始终相同。
编辑(评论中的问题):
你必须使用min(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
}
答案 1 :(得分: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
}
}
实际上不需要名为 debug 的精灵,但它会向您显示直观的矩形。