搜索具有最低y坐标的圆内节点(SKShapeNode)

时间:2016-01-11 19:36:08

标签: ios objective-c sprite-kit

我想搜索圆圈内的节点 - 圆圈是SKShapeNode。返回节点(SKSpriteNode)应该是在圆圈内找到的节点,具有最低的y值。

对于感兴趣的人,这是我用于搜索的代码:

SKSpriteNode *currentNode =  [SKSpriteNode spriteNodeWithColor:[UIColor clearColor] size:CGSizeMake(0, 0)];
[currentNode setPosition:CGPointMake(0, 99999)];

SKShapeNode *circle = [SKShapeNode shapeNodeWithCircleOfRadius:100];

// adding circle and other nodes to scene    

[self enumerateChildNodesWithName://* usingBlock:^(SKSpriteNode *foundNode, BOOL * _Nonnull stop) {
if ([circle containsPoint:currentNode.position]) {
    if (currentNode.position.y > foundNode.position.y) {
       currentNode = foundNode;
    }
}];

// currentNode = node inside circle with lowest y

我不喜欢这个解决方案,看起来只需要花费太多精力来找到一个节点。我也尝试过使用nodesAtPoint / nodeAtPoint,但这在我的项目中不起作用 - ' big'子节点。

我很好奇:是否有更简单的方法来搜索具有此类细节的节点?

1 个答案:

答案 0 :(得分:0)

检查Y坐标将比[circle containsPoint]快得多,因此您可能希望更改条件的顺序,以便首先比较候选节点的y坐标,并且只检查圆形containsPoint以查找具有y坐标的节点圆的最低点(-100)和currentNode的Y坐标。

类似的东西:

if ( foundNode.position.y > -100 
     && foundNode.position.y < currentNode.position.y )
{
  if ([circle containsPoint:foundNode.position])
  { currentNode = foundNode }
} 

注意:我假设enemy.position实际上是指foundNode.position。