将节点设置为随机 Y 位置而不重叠

Set node to random Y position without overlapping

我想在不重叠的情况下在不同的 Y 位置创建节点。世界节点发送移动,所以我不能在循环中增加 Y 值,因为我希望位置是随机的

// 我用来创建随机数的函数

func randRange (lower: Int , upper: Int) -> Int {
   return lower + Int(arc4random_uniform(UInt32(upper - lower + 1)))
}

// 在随机Y位置创建节点

for var i = 0; i < 4; i++
{

    var minY:Int = -Int(self.frame.size.height / 2 );
    var maxY:Int = Int(self.frame.size.height / 2);
    var y:CGFloat = CGFloat(randRange(minY, upper:maxY));

    var node: SKSpriteNode = SKSpriteNode(color: UIColor.whiteColor(), size: CGSizeMake(50, 5));
    node.position = CGPointMake(self.frame.size.width/2 + node.frame.size.width/2, y);
    world.addChild(node);

}
  1. 解决方案一

创建一个数组并将每个 Y 位置放在那里并检查是否已经设置。然后节点离开屏幕将其从数组中删除

但我不知道如何在数组中搜索并从中删除

有更好的方法吗?

下面是如何搜索数组的代码:

for(int i=0;i<arrayNode.count;i++)
{
    if(arrayNode[0].yPosition == randomNumber) //Random number
          //Pick another number
}

从数组中删除可能有点棘手。但是,如果将数组设为 NSMutableArray,则可以访问 removeObject: 方法。当您需要删除节点时,您应该可以访问它,可能是通过一些联系事件。您可以将此节点传递到:

[arrayNode removeObject: yourNode];