编辑:我一定刚刚在破解前。清洁和其他重建似乎已修复它。删除SKNode树在touchesBegan
我希望第二组眼睛会告诉我我错过了什么。我有SpriteKit游戏场景(iOS 7.1)和一些“HUD”SKSpriteNodes ...静音声音按钮,显示最后的乐谱等。我正在检测他们是否碰到了touchesBegan:withEvent。
当触摸节点时,会调用相应的方法来显示其内容(此部分工作正常)。他们不是SKScenes只是一个SKSpriteNode图像,顶部有一些标签。其中一个标签是一个后退按钮,我想要关闭该节点/将其从父项中移除。这不像我预期的那样工作。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInNode:self];
SKNode *touchedNode = [self nodeAtPoint:touchLocation];
// --- Scores
if ([touchedNode.name isEqualToString:@"scoresButton"]) {
[self showScoresBoard];
}
// --- Back
if ([touchedNode.name isEqualToString:@"backLabel"]) {
SKNode *chalkboard = [self childNodeWithName:@"chalkboard"];
NSLog(@"Touched: %@", touchedNode.name); // backLabel shows in display
// chalkboard.alpha = 0.0; // Oddly, this works :/
[chalkboard removeFromParent]; // This does not work ?
}
}
我showScoresBoard是非常标准的东西...
-(void)showScoresBoard {
// Root Node
SKNode *chalkboard = [SKNode node];
chalkboard.name = @"chalkboard";
// [Background, labels...]
// Back Label
SKLabelNode *backLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
backLabel.name = @"backLabel";
backLabel.text = @"Back";
backLabel.fontColor = [UIColor whiteColor];
backLabel.fontSize = 22;
backLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) - 165);
backLabel.zPosition = 150;
[chalkboard addChild:backLabel];
[self addChild:chalkboard];
}
所以我想我的问题是,为什么不是 “[黑板removeFromParent]” 做什么?我在那里错过了什么?它必须正确地看到SKNode正在改变它的alpha属性。
有什么想法?
是否发生任何类型的错误或者这个方法根本不会被调用? – ZeMoon
没有错误...并且如果我在放弃之前removeFromParent产生输出,所以我知道它使它在那里的NSLog。 –