在touchesBegan中删除SKNode树

时间:2014-07-17 12:48:00

标签: ios objective-c sprite-kit

编辑:我一定是刚刚破解了。清洁和另一次重建似乎已经修复了它。

我希望第二眼看到这个会告诉我我失踪了什么。我有一些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];
}

所以我想我的问题是,为什么不是" [黑板删除从父母那里]"做任何事情?我在那里错过了什么?它必须正确地看到SKNode,因为它改变了它的alpha属性。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

严重不确定为什么它现在正在运作。在重新审视该问题之前,我所做的只是在完成项目的另一部分后进行清理和构建。一定是干净的一些流浪点。

答案 1 :(得分:0)

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