如何删除顶部节点时删除节点spritekit

时间:2015-02-28 22:49:42

标签: ios objective-c sprite-kit

我有2个节点,如图所示。上面的节点(SKLabelNode)是下面节点(SKSpriteNode)的子节点。当我触摸SKLabelNode时,应该从场景中移除两个节点,但现在只是标签节点被删除了,当我触摸上面的节点时,你能建议如何删除下面的节点吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

为节点命名并在适当的时候枚举(在swift中):

 let nodes = ["button", "label"]
 for string in nodes {
   enumerateChildNodesWithName(string) {
     node, stop in
     node.removeFromParent()
   }
 }

obj-c示例:

[self enumerateChildNodesWithName:@"button" usingBlock:^(SKNode *node, BOOL *stop) {
    // remove the button node from your scene
    [node removeFromParent];
  }];
[self enumerateChildNodesWithName:@"label" usingBlock:^(SKNode *node, BOOL *stop) {
    // remove the label node from your scene
    [node removeFromParent];
  }];

答案 1 :(得分:0)

如果没有用于删除节点和用于创建节点的代码的代码,这很难回答。我猜你正在使用标准触摸begin方法,只是获得节点。如果是这种情况,您可能想要检查您实际触摸的节点。

 CGPoint location = [touch locationInNode:self];
 SKNode *node = [self nodeAtPoint:location];

 if ([node isKindOfClass:[SKLabelNode class]])
 {
    [node.parent removeFromParent];
 }
 else
 {
    [node removeFromParent];
 }

但是,如果您的节点有名称(这会更安全),您最好先检查名称...

CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];

if ([node.name isEqualToString:@"label"])
{
    [node.parent removeFromParent];
}
else if ([node.name isEqualToString:@"button"])
{
    [node removeFromParent];
}