我需要在屏幕外找到一个随机点来产生一个敌人。我怎样才能做到这一点?我查阅了其他主题,但它们都令人困惑。
答案 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定义的多个区域中生成某些内容的任何情况。