我有2个节点,如图所示。上面的节点(SKLabelNode
)是下面节点(SKSpriteNode
)的子节点。当我触摸SKLabelNode
时,应该从场景中移除两个节点,但现在只是标签节点被删除了,当我触摸上面的节点时,你能建议如何删除下面的节点吗?
答案 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];
}