我想搜索圆圈内的节点 - 圆圈是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'子节点。
我很好奇:是否有更简单的方法来搜索具有此类细节的节点?
答案 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。