在 touchesBegan 中删除 SKNode 树

Posted

技术标签:

【中文标题】在 touchesBegan 中删除 SKNode 树【英文标题】:Remove SKNode Tree in touchesBegan 【发布时间】:2014-07-17 12:47:59 【问题描述】:

编辑:我之前一定是在破解。 Clean 和另一次重建似乎已修复它。

我希望对这个问题的第二次关注会告诉我我缺少什么。我有带有几个“HUD”SKSpriteNodes 的 SpriteKit 游戏场景(ios 7.1)...静音按钮,显示最后得分等。我正在检测它们是否在 touchesBegan:withEvent 中被触摸。

当节点被触摸时,会调用相应的方法来显示它的内容(这部分工作正常)。它们不是 SKScene,只是顶部带有一些标签的 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];

所以我想我的问题是,为什么“[chalkboard removeFromParent]”没有做任何事情?我在那里想念什么?它必须正确地看到 SKNode,因为改变它的 alpha 属性是有效的。

有什么想法吗?

【问题讨论】:

是否发生任何类型的错误或根本没有调用此方法? 没有错误...如果我在 removeFromParent 确实产生输出之前放入 NSLog,那么我知道它正在那里。 【参考方案1】:

真的不知道为什么它现在可以工作。在重新审视这个问题之前,我唯一做的就是在处理项目的另一部分之后进行清理和构建。一定是清洁工处理过的一些杂物。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于在 touchesBegan 中删除 SKNode 树的主要内容,如果未能解决你的问题,请参考以下文章

touchesBegan 在一个节点上删除它

SpriteKit iOS 7 Sknode 没有被删除

Swift:尝试添加一个已经有父节点的 SKNode:

使用 swift 查找 SKNode 的相对 Y 位置

SKNode 上的 removeFromParent 是不是会破坏实例?

swift - 仅在着陆时跳跃