我知道您可以使用来检测接触碰撞SKPhysicsContactDelegate
,但是您可以检查一个物理物体当前是否正在接触另一个物理物体?
我需要这样做来检查场景中仍有哪些区域可以放置物品(例如,选择一个随机点,如果途中有东西,请选择另一个随机点)。
有这个功能:
/* Returns an array of all SKPhysicsBodies currently in contact with this one */
- (NSArray *)allContactedBodies;
但是直到下一次创建节点的更新之后,它似乎没有返回任何有用的信息。
您可以编写一个函数来手动遍历所有节点,并检查两个圆是否与一个点相交。
由于您曾说过每次的半径都会不同,因此您必须对其进行跟踪。一种方法是使用节点的用户数据。
[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
。这意味着您可以添加新节点而不接触任何其他节点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句