Ios 检查场景中的位置是否被精灵占用

Ios 检查场景中的位置是否被精灵占用,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在使用Xcode、SpriteKit和Swift构建我的第一款iPhone游戏。我不熟悉这些技术,但熟悉一般编程概念 以下是我用英语所要做的。我希望圆圈随机出现在屏幕上,然后开始扩大大小。但是,我不希望圆出现在当前存在圆的位置。我很难确定每个圆圈的位置 在GameSecene.swift中,我在didMoveToView中有以下代码: runAction(SKAction.repeatActionForever( SKAction.sequence([

我正在使用Xcode、SpriteKit和Swift构建我的第一款iPhone游戏。我不熟悉这些技术,但熟悉一般编程概念

以下是我用英语所要做的。我希望圆圈随机出现在屏幕上,然后开始扩大大小。但是,我不希望圆出现在当前存在圆的位置。我很难确定每个圆圈的位置

在GameSecene.swift中,我在didMoveToView中有以下代码:

runAction(SKAction.repeatActionForever(
        SKAction.sequence([
            SKAction.runBlock(addCircle), SKAction.waitForDuration(3, withRange: 2)]
        )))  
上面的代码调用我的“addCircle”方法:

上面的随机函数只选择给定范围内的一个随机数。如何检查随机函数是否正在生成当前被另一个圆占用的位置


我正在考虑使用do..while循环随机生成一组x和y坐标,然后检查圆是否在该位置,但我找不到如何检查该条件。任何帮助都将不胜感激。

在这方面,有几种方法可以帮助您:

  • (BOOL)intersectsNode:(SKNode*)节点
    ,可与SKNode一起使用,以及
  • CGRectContainsPoint()
    以及
    CGRectContainsRect()
    方法
  • 例如,检查交叉点的回路可以如下所示:

    var point: CGPoint
    var exit:Bool = false
    
    while (!exit) {
        let posX = random(min: 50, max: 270)
        let posY = random(min: 50, max: 518)
    
        point = CGPoint(x: posX, y: posY)
    
        var pointFound: Bool = true
    
        self.enumerateChildNodesWithName("circle", usingBlock: {
            node, stop in
    
            let sprite:SKSpriteNode = node as SKSpriteNode
            if (CGRectContainsPoint(sprite.frame, point))
            {
                pointFound = false
                stop.memory = true
            }
        })
    
        if (pointFound)
        {
            exit = true
        }
    }
    
    //point contains CGPoint where no other circle exists
    //Declare new circle at point
    

    if
    条件为
    true
    时,您应该退出
    enumerateChildNodesWithName
    。您可以通过设置
    stop.memory=true
    再次感谢@0x141E来实现这一点。我尝试设置
    stop=true
    ,但它说
    无法分配给'let'值'stop'
    。编辑答案。非常感谢您的回复!EnumerateChildsNodeswithName方法正是我所需要的。我有一种感觉,像这样的东西是可用的,但找不到它。这就是为什么我给每个精灵取名为“圆圈”。再次感谢。
    var point: CGPoint
    var exit:Bool = false
    
    while (!exit) {
        let posX = random(min: 50, max: 270)
        let posY = random(min: 50, max: 518)
    
        point = CGPoint(x: posX, y: posY)
    
        var pointFound: Bool = true
    
        self.enumerateChildNodesWithName("circle", usingBlock: {
            node, stop in
    
            let sprite:SKSpriteNode = node as SKSpriteNode
            if (CGRectContainsPoint(sprite.frame, point))
            {
                pointFound = false
                stop.memory = true
            }
        })
    
        if (pointFound)
        {
            exit = true
        }
    }
    
    //point contains CGPoint where no other circle exists
    //Declare new circle at point