我知道您可以使用SKPhysicsContactDelegate
检测接触碰撞,但是您可以检查物理体是否当前接触另一个物理体?
我需要这个来检查场景中的哪个区域仍然可以放置一个项目(例如,选择一个随机点,如果还有一些东西,请选择另一个随机点)。
有这个功能:
/* Returns an array of all SKPhysicsBodies currently in contact with this one */
- (NSArray *)allContactedBodies;
但在下次更新创建节点之前,它似乎没有任何有用的东西。
答案 0 :(得分:2)
您可以编写一个函数来手动迭代所有节点,并检查两个圆是否与点相交。
由于你说圆圈的半径每次都不同,你必须跟踪它。一种方法是使用节点的用户数据。
[node.userData setObject:[NSNumber numberWithFloat:10.0] forKey:@"radius"];
然后你可以通过以下方式找到是否有相交的圆圈。
-(BOOL)checkPointForNode:(CGPoint)point withRadius:(CGFloat)nodeRadius
{
for (SKNode* child in [self children])
{
NSNumber *childRadius = child.userData[@"radius"];
if (childRadius != nil)
{
CGFloat diffX = point.x - child.position.x;
CGFloat diffY = point.y - child.position.y;
CGFloat distance = sqrtf(diffX * diffX + diffY * diffY);
CGFloat sumRadius = nodeRadius + childRadius.floatValue;
if (distance <= sumRadius)
{
return YES;
}
}
}
return NO;
}
如果要添加的圆的边界内有圆,则函数返回YES
。这意味着您无法在不触及其他节点的情况下添加新节点。否则返回NO
。这意味着您可以在不触及任何其他节点的情况下添加新节点。