以下代码无法按预期工作。根据SPRITE KIT编程指南,第61和62页,可以使用正则表达式语法来执行“高级搜索”,因此,除非我误解了实现,否则这应该有用吗?
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];
}];
但是,唉,节点不会消失。如果我指定一个确切的名称(如@"CIRCLE_10_10"
)它可以工作,但通配符表达式*
似乎不是,也不是这样的@"CIRCLE_[0-9]+_[0-9]+"
- 即使我使用斜杠@"/CIRCLE_[0-9]+_[0-9]+"
。
我做错了什么?
修改: 这个工作和我可以实现正则表达式匹配而不是子串,但希望让Sprite Kit实现工作(理想情况下)。
[[self children] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
SKNode *node = (SKNode *)obj;
if ([[node.name substringWithRange:NSMakeRange(0, 7)] isEqual: @"CIRCLE_"]) {
[node removeFromParent];
}
}];
答案 0 :(得分:0)
我在iOS和OS-X上的Xcode的当前版本和Beta版本中尝试了以下代码变体。
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];
所有示例表达式都适用于两个版本的SDK中的Mac。但是,在iOS上,他们只在开发者预览版中工作。