在 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 树的主要内容,如果未能解决你的问题,请参考以下文章