SpriteKit在屏幕周边找到点

时间:2014-07-11 23:45:52

标签: ios sprite-kit cgrect

我需要在屏幕外找到一个随机点来产生一个敌人。我怎样才能做到这一点?我查阅了其他主题,但它们都令人困惑。

1 个答案:

答案 0 :(得分:0)

你可以使用这样的方法:

+(CGPoint)randomPointInRects:(NSArray*)rects
{
    // choose one of the rects in the array randomly 
    int randomIndex = arc4random() % rects.count;
    CGRect rect = [(NSValue*)rects[randomIndex] CGRectValue];

    // get a random x and y location based on the chosen rect
    float randX = arc4random() % (int)rect.size.width + rect.origin.x;
    float randY = arc4random() % (int)rect.size.height + rect.origin.y;

    // store value in point
    CGPoint randomPoint = CGPointMake(randX, randY);

    return randomPoint;
}

然后,为了得到一个1024x768屏幕上的随机点,您可以执行以下操作:

    NSMutableArray *rects = [NSMutableArray array];

    // define spawn areas with CGRect's

    //top
    [rects addObject:[NSValue valueWithCGRect:CGRectMake(0, 768, 1024, 50)]];

    // bottom
    [rects addObject:[NSValue valueWithCGRect:CGRectMake(0, -50, 1024, 50)]];

    //left
    [rects addObject:[NSValue valueWithCGRect:CGRectMake(-50, 0, 50, 768)]];

    //right
    [rects addObject:[NSValue valueWithCGRect:CGRectMake(1024, 0, 50, 768)]];

    // pass array to method to return a random point in those rects.
    CGPoint randomPoint = [self randomPointInRects:rects];

您基本上定义了要生成节点的区域,将它们存储在数组中,将它们传递给方法,它将从这些rects中返回一个随机点。

我为每条边添加了一个50像素的缓冲区。

我很快就这样做了,所以它可能有一个bug,但如果是这样的话,这种方法的逻辑应该会让你到那儿! :)

此解决方案也适用于您希望在CGRect s定义的多个区域中生成某些内容的任何情况。