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

标签 swift xcode sprite-kit

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

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

相关文章:

arrays - 两个总和 : Elements in 2 arrays equal predetermined Sum Swift 3

Swift 使用子字典设置 firebase 字典的值

xcode - iOS - 不断删除派生数据以修复代码完成

swift - 如何在 SpriteKit 游戏中保存游戏进度

ios - 状态恢复,如何拦截和暂停SKScene

ios - Firebase .queryStarting 不起作用(Swift)

iphone - Xcode 创建中的 plist

ios - 如何为解析类建模以包含 isliked、isfollowing 字段以及 PFQuery 结果

swift - SKSpriteNode Overlay 未显示

javascript - iOS WKWebview 未响应 <a href ="javascript:doSomething()"...></a> 上的点击事件