2014-07-17 34 views
1

编辑:我一定刚刚在破解前。清洁和其他重建似乎已修复它。删除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属性。

有什么想法?

+0

是否发生任何类型的错误或者这个方法根本不会被调用? – ZeMoon

+0

没有错误...并且如果我在放弃之前removeFromParent产生输出,所以我知道它使它在那里的NSLog。 –

回答

0

严重不确定它为什么现在工作。在重新审视这个问题之前,我只做了一件事,就是在完成项目的另一部分之后进行清理和构建。一定是一些干净照顾的流浪者。

0

[self.parent removeFromParent];可能是工作