SpriteKit enumerateChildNodesWithName with advanced searching?

你。 提交于 2020-01-01 03:11:06

问题


The following code doesn't work as expected. According to the SPRITE KIT PROGRAMMING GUIDE, pages 61 and 62 one may perform "advanced searches" by using regular expression like syntax, so, unless I'm misunderstanding the implementation, this should work?

SKShapeNode *myCircle = [self getCircle];
myCircle.name = [NSString stringWithFormat:@"CIRCLE_%d_%d", x, y];
myCircle.position = CGPointMake(10,10);
[self addChild:myCircle];   

// Lets remove ALL SKNodes that begin with the name "CIRCLE_"
[self enumerateChildNodesWithName:@"CIRCLE_*" usingBlock:^(SKNode *node, BOOL *stop) {
    [node removeFromParent];
}];

But alas, the nodes do not go away. If I specify an exact name (like @"CIRCLE_10_10") it works, but the wildcard expression * doesn't seem to, nor does something like this @"CIRCLE_[0-9]+_[0-9]+" -- not even if I use slashes @"/CIRCLE_[0-9]+_[0-9]+".

What am I doing wrong?

EDIT: THIS WORKS and I could implement regular expression matching instead of substring'ing, but hoping to get the Sprite Kit implementation working (ideally).

[[self children] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    SKNode *node = (SKNode *)obj;
    if ([[node.name substringWithRange:NSMakeRange(0, 7)] isEqual: @"CIRCLE_"]) {
        [node removeFromParent];
    }
}];

回答1:


I tried the following variation of your code in both the current and beta versions of Xcode on both iOS and OS-X.

    SKScene *scene = [[SKScene alloc] initWithSize:self.gameView.frame.size];

    for (int x = 0; x < 20; x++)
    {
        for (int y = 0; y < 20; y++)
        {
            CGPathRef myPath = CGPathCreateWithEllipseInRect(CGRectMake(0, 0, 20, 20), NULL);
            SKShapeNode *myCircle = [[SKShapeNode alloc] init];
            myCircle.path = myPath;
#if TARGET_OS_IPHONE
            myCircle.fillColor = [UIColor redColor];
#else
            myCircle.fillColor = [NSColor redColor];
#endif
            myCircle.name = [NSString stringWithFormat:@"CIRCLE_%d_%d", x, y];
            myCircle.position = CGPointMake(20*x,20*y);
            [scene addChild:myCircle];
            CGPathRelease(myPath);
        }
    }

    [self.gameView presentScene:scene];

All of your sample expressions work on the Mac in both versions of the SDK. On iOS, however, they only worked in the Developer Preview.



来源:https://stackoverflow.com/questions/20711426/spritekit-enumeratechildnodeswithname-with-advanced-searching

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!