gpt4 book ai didi

swift - 无重叠的随机节点位置

转载 作者:行者123 更新时间:2023-11-28 08:31:56 25 4
gpt4 key购买 nike

我有一个问题,我不知道从哪里开始。

我使用以下代码将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com