生成随机SKNode位置,而不等同于其他位置

时间:2017-07-21 18:19:41

标签: ios swift sprite-kit

我有一个数组SKNodes,一行一行,我想创建一个与其他人没有相同位置的数组,怎么样?我有一些实际上没有用的代码,我没有看到框架的节点,但有时候,当我的节点移动时,新节点与旧节点重叠,它不应该是#39 ; t(和btw,它有时在节点的中间重叠,这就是为什么我确定它不是由延迟引起的)。您可以在下面查看:

extension Point {

static func getRandom(inside scene: SKScene, andArray array: [SKSpriteNode]) -> CGPoint {
    let x: CGFloat = getRandomX(inside: scene, andArray: array)
    let y: CGFloat = getRandomY(inside: scene, andArray: array)
    let i = getRandomSign()
    return Point(x * i, y * i)
}

private static func getRandomX(inside scene: SKScene, andArray array: [SKSpriteNode]) -> CGFloat {
    var val = CGFloat(arc4random() % UInt32(scene.frame.width/2))

    for node in array {
        if val == node.position.x {
            val = getRandomX(inside: scene, andArray: array)
        }
    }
    return val
}

private static func getRandomY(inside scene: SKScene, andArray array: [SKSpriteNode]) -> CGFloat {
    var val = CGFloat(arc4random() % UInt32(scene.frame.height/2))

    for node in array {
        if val == node.position.y {
            val = getRandomY(inside: scene, andArray: array)
        }
    }
    return val
}

private static func getRandomSign() -> CGFloat {
    let val = arc4random()
    if val % 2 == 0 {
        return -1
    } else {
        return 1
    }
}

}

在SKScene中添加节点时会调用CGPoint.getRandom(....)

0 个答案:

没有答案