我有一个问题,我不知道从哪里开始。
我使用以下代码将 sprite1 分配到一个随机位置:
let index2 = arc4random() % 3;
if index2 == 0 {
sqrite1.position = CGPoint(x: CGRectGetMidX(self.frame) - 100 , y: CGRectGetMidY(self.frame))
} else if index2 == 1 {
sprite1.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
} else if index2 == 2{
sprite1.position = CGPoint(x: CGRectGetMidX(self.frame) + 100, y: CGRectGetMidY(self.frame))
}
然后我再次重复上面的代码,但是对于 sprite2 如下:
我使用相同的代码将 sprite2 分配到一个随机位置,方法与 sprite 1 相同:
let index2 = arc4random() % 3;
if index2 == 0 {
sqrite2.position = CGPoint(x: CGRectGetMidX(self.frame) - 100 , y: CGRectGetMidY(self.frame))
} else if index2 == 1 {
sprite2.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
} else if index2 == 2{
sprite2.position = CGPoint(x: CGRectGetMidX(self.frame) + 100, y: CGRectGetMidY(self.frame))
}
然后我第三次重复上面的代码,但是对于 sprite3 如下:
然后我使用相同的代码将 sprite3 分配到一个随机位置,方法与分配 sprite1 和 sprite2 的方式相同:
let index2 = arc4random() % 3;
if index2 == 0 {
sqrite3.position = CGPoint(x: CGRectGetMidX(self.frame) - 100 , y: CGRectGetMidY(self.frame))
} else if index2 == 1 {
sprite3.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
} else if index2 == 2{
sprite3.position = CGPoint(x: CGRectGetMidX(self.frame) + 100, y: CGRectGetMidY(self.frame))
}
现在,这是我的问题:我想确保 sprite1、sprite2 和 sprite3 不会在同一位置结束。我怎样才能做到这一点?我试图想办法做到这一点,但我不知道从哪里开始。
谢谢:)
最佳答案
我建议创建一个将节点分配到随机点的函数。
func randomSpot(node: SKSpriteNode) {
let index2 = arc4random() % 3;
if index2 == 0 {
node.position = CGPoint(x: CGRectGetMidX(self.frame) - 100 , y: CGRectGetMidY(self.frame))
} else if index2 == 1 {
node.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
} else if index2 == 2{
node.position = CGPoint(x: CGRectGetMidX(self.frame) + 100, y: CGRectGetMidY(self.frame))
}
}
然后实际随机化它:
randomSpot(sprite1)
确保它不在同一个地方:
randomSpot(sprite2)
while sprite2.position == sprite1.position {
randomSpot(sprite2)
}
对于 sprite3:
randomSpot(sprit3)
while sprite3.position == sprite1.position || sprite3.position == sprite2.position {
randomSpot(sprite3)
}
注意:您可以使用扩展来做到这一点:
extension SKSpriteNode {
func randomSpot() {
let index2 = arc4random() % 3;
if index2 == 0 {
self.position = CGPoint(x: CGRectGetMidX(self.parent!.frame) - 100 , y: CGRectGetMidY(self.parent!.frame))
} else if index2 == 1 {
self.position = CGPoint(x: CGRectGetMidX(self.parent!.frame), y: CGRectGetMidY(self.parent!.frame))
} else if index2 == 2{
self.position = CGPoint(x: CGRectGetMidX(self.parent!.frame) + 100, y: CGRectGetMidY(self.parent!.frame))
}
}
}
然后你会称它为:
sprite1.randomSpot()
关于swift - 无重叠的随机节点位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677454/