【发布时间】:2016-01-16 22:58:29
【问题描述】:
我想搜索一个圆圈内的节点 - 圆圈是一个 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 但这在我的项目中不起作用 - “大”子节点。
我很好奇:有没有更简单的方法来搜索具有这样细节的节点?
【问题讨论】:
-
恐怕不行。我认为这是检查节点的唯一方法。
-
“我也尝试过使用nodeAtPoint/nodeAtPoint,但这在我的项目中不起作用”。我不明白,为什么它不起作用?你确定你不只是使用不当吗?您应该能够从圆圈中的最低点开始工作并继续调用 nodeAtPoint 直到您返回一个节点,这将是最低节点。使用少量节点,它的速度与您当前的方法相似。量大的话,速度会明显加快。
-
它不起作用,因为节点有(大)子节点,我只想检测“主”节点。我再也找不到它了,但我认为 nodeatpoint 会自动搜索节点的子节点。如果这不是真的,请告诉我,但我认为它是。另外:为什么那样会更快?如果圆圈很大(并且节点相对较小),则您需要在圆圈中检查很多点。
标签: ios objective-c sprite-kit